JTextAreaの背景に画像を表示
Total: 19452
, Today: 2
, Yesterday: 1
Posted by aterai at
Last-modified:
概要
JTextArea
などのコンポーネントの背景に、Border
を使って中心揃えした画像を表示します。Swing - How can I use TextArea with Background Picture ?のコードを引用しています。
Screenshot
Advertisement
サンプルコード
class CentredBackgroundBorder implements Border {
private final Insets insets = new Insets(0, 0, 0, 0);
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) {
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();
}
@Override public Insets getBorderInsets(Component c) {
return insets;
}
@Override public boolean isBorderOpaque() {
return true;
}
}
View in GitHub: Java, Kotlin解説
上記のサンプルでは、以下のようにしてJTextArea
の背景に画像を表示しています。
- 画像を中央に表示するようにした
Border
を作成してこれをViewport
に設定 Viewport
に追加したJTextArea
の背景を透明化textarea.setOpaque(false); textarea.setBackground(new Color(0x0, true)));
Border
を使って背景に画像を表示する方法はJDesktopPane
(参考: JInternalFrameを半透明にする)や、その他のJComponent
でも使用可能