TITLE:JTextAreaの背景に画像を表示
#navi(../)
RIGHT:Posted by [[aterai]] at 2006-03-06
*JTextAreaの背景に画像を表示 [#s334455a]
JTextAreaの背景に画像を表示しています。[http://forums.sun.com/thread.jspa?threadID=567904 Swing - How can I use TextArea with Background Picture ?]のようにJava Forumでは定番のコードを引用しています。

-&jnlp;
-&jar;
-&zip;

//#screenshot
#ref(http://lh5.ggpht.com/_9Z4BYR88imo/TQTIyAIY_mI/AAAAAAAAATU/GovGMBqjzRo/s800/CentredBackgroundBorder.png)

**サンプルコード [#c5694631]
#code{{
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;
  }
}
}}

**解説 [#z741df6b]
画像を中央に表示するようにしたBorderを作成し、これをViewportのBorderとして設定しています。上記のサンプルでは、JTextAreaの背景に適用していますが、JDesktopPane(参考:[[JInternalFrameを半透明にする>Swing/TransparentFrame]])や、その他のJComponentでも同様に使用することが出来ます。

**参考リンク [#k26904ee]
-[http://forums.sun.com/thread.jspa?threadID=567904 Swing - How can I use TextArea with Background Picture ?]
-[[JInternalFrameを半透明にする>Swing/TransparentFrame]]
-[http://www.bekkoame.ne.jp/~bootan/free2.html デジタル出力工房 絵写楽]

**コメント [#tc6f84b8]
- centreは英式のcenterのこと?らしいです。 -- [[aterai]] &new{2006-03-23 (木) 00:00:58};

#comment