Swing/CentredBackgroundBorder のバックアップの現在との差分(No.4)
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の背景に画像を表示しています。Java Forums - 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
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;
}
}
@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();
}
-&jnlp;
-&jar;
-&zip;
@Override public Insets getBorderInsets(Component c) {
return insets;
}
#spandel
**解説 [#z741df6b]
#spanend
#spandel
画像を中央に表示するようにしたBorderを作成し、これをViewportのBorderとして設定しています。上記のサンプルでは、JTextAreaの背景に適用していますが、JDesktopPaneや、その他のJComponentでも同様に使用することが出来ます。
#spanend
#spandel
**参考リンク [#k26904ee]
#spanend
-[[Java Forums - How can I use TextArea with Background Picture ?>http://forum.java.sun.com/thread.jspa?forumID=57&threadID=567904]]
-[[デジタル出力工房 絵写楽>http://www.bekkoame.ne.jp/~bootan/free2.html]]
@Override public boolean isBorderOpaque() {
return true;
}
#spanadd
}
#spanend
#spanadd
View in GitHub: Java, Kotlinコメント
- centreはcenterの英式らしいです。 -- terai
解説
上記のサンプルでは、以下のようにしてJTextArea
の背景に画像を表示しています。
- 画像を中央に表示するようにした
Border
を作成してこれをViewport
に設定 -
Viewport
に追加したJTextArea
の背景を透明化#spanend #spanadd textarea.setOpaque(false); #spanend #spanadd textarea.setBackground(new Color(0x0, true))); #spanend #spanadd
-
Border
を使って背景に画像を表示する方法はJDesktopPane
(参考: JInternalFrameを半透明にする)や、その他のJComponent
でも使用可能