Swing/CentredBackgroundBorder のバックアップの現在との差分(No.7)
TITLE:JTextAreaの背景に画像を表示
JTextAreaの背景に画像を表示
編集者:Terai Atsuhiro~
作成日:2006-03-06
更新日:2022-01-09 (日) 02:00:12
概要
JTextArea
などのコンポーネントの背景に、Border
を使って中心揃えした画像を表示します。Swing - How can I use TextArea with Background Picture ?のコードを引用しています。
Screenshot
Advertisement
概要
JTextAreaの背景に画像を表示しています。How can I use TextArea with Background Picture ?のようにJava Forumでは定番のコードを引用しています。サンプルコード
#spanend
#spanadd
class CentredBackgroundBorder implements Border {
#spanend
private final Insets insets = new Insets(0, 0, 0, 0);
private final BufferedImage image;
#spandel
#screenshot
#spanend
public CentredBackgroundBorder(BufferedImage image) {
this.image = image;
}
#spandel
**サンプルコード [#c5694631]
#spanend
@Override public void paintBorder(
Component c, Graphics g, int x, int y, int width, int height) {
int cx = x + (width - image.getWidth()) / 2;
int cy = y + (height - image.getHeight()) / 2;
Graphics2D g2 = (Graphics2D) g.create();
g2.drawRenderedImage(image, AffineTransform.getTranslateInstance(cx, cy));
g2.dispose();
}
#spanadd
#spanend
@Override public Insets getBorderInsets(Component c) {
return insets;
}
#spanadd
#spanend
@Override public boolean isBorderOpaque() {
return true;
}
#spanadd
}
#spanend
#spanadd
View in GitHub: Java, Kotlin解説
上記のサンプルでは、以下のようにしてJTextArea
の背景に画像を表示しています。
- 画像を中央に表示するようにした
Border
を作成してこれをViewport
に設定 -
Viewport
に追加したJTextArea
の背景を透明化class CentredBackgroundBorder implements Border { private final BufferedImage image; public CentredBackgroundBorder(BufferedImage image) { this.image = image; } public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) { x += (width-image.getWidth())/2; y += (height-image.getHeight())/2; ((Graphics2D) g).drawRenderedImage(image, AffineTransform.getTranslateInstance(x,y)); } public Insets getBorderInsets(Component c) { return new Insets(0,0,0,0); } public boolean isBorderOpaque() { return true; } } #spanadd textarea.setOpaque(false); #spanend #spanadd textarea.setBackground(new Color(0x0, true))); #spanend
- &jnlp;
- &jar;
- &zip;
解説
画像を中央に表示するようにしたBorderを作成し、これをViewportのBorderとして設定しています。上記のサンプルでは、JTextAreaの背景に適用していますが、JDesktopPaneや、その他のJComponentでも同様に使用することが出来ます。-
Border
を使って背景に画像を表示する方法はJDesktopPane
(参考: JInternalFrameを半透明にする)や、その他のJComponent
でも使用可能
参考リンク
参考リンク
コメント
- centreは英式のcenterのことらしいです。 -- terai
コメント
-
centre
は英式のcenter
のこと?らしいです。 -- aterai