• 追加された行はこの色です。
  • 削除された行はこの色です。
---
title: JTextAreaの背景に画像を表示
tags: [JTextArea, BufferedImage, Border, JViewport]
author: aterai
pubdate: 2006-03-06T19:15:08+09:00
description: JTextAreaの背景に画像を表示しています。
---
* 概要 [#s334455a]
`JTextArea`の背景に画像を表示しています。[https://forums.oracle.com/thread/1395763 Swing - How can I use TextArea with Background Picture ?]のコードを引用しています。

#download(https://lh5.googleusercontent.com/_9Z4BYR88imo/TQTIyAIY_mI/AAAAAAAAATU/GovGMBqjzRo/s800/CentredBackgroundBorder.png)

* サンプルコード [#c5694631]
#code(link){{
class CentredBackgroundBorder implements Border {
  private final BufferedImage image;
  public CentredBackgroundBorder(BufferedImage image) {
    this.image = image;
  }
  @Override 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(
    ((Graphics2D) g).drawRenderedImage(
        image, AffineTransform.getTranslateInstance(x,y));
  }
  @Override public Insets getBorderInsets(Component c) {
    return new Insets(0,0,0,0);
  }
  @Override public boolean isBorderOpaque() {
    return true;
  }
}
}}

* 解説 [#z741df6b]
上記のサンプルでは、以下のようにして`JTextArea`の背景に画像を表示しています。

- 画像を中央に表示するようにした`Border`を作成し、これを`Viewport`の`Border`として設定
- `Viewport`に追加した`JTextArea`の背景を透明化
-- `textarea.setOpaque(false);`
-- `textarea.setBackground(new Color(0,0,0,0)));`

----
`Border`を使って背景に画像を表示する方法は、`JDesktopPane`(参考:[[JInternalFrameを半透明にする>Swing/TransparentFrame]])や、その他の`JComponent`でも使用することが出来ます。

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

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

#comment