Swing/RootPaneBackground のバックアップの現在との差分(No.4)
- category: swing folder: RootPaneBackground title: JRootPaneの背景として画像を表示 tags: [JRootPane, BufferedImage, ContentPane, JDesktopPane, Translucent, Transparent] author: aterai pubdate: 2013-01-07T00:31:26+09:00 description: JRootPaneの背景として画像を表示しています。 image:
概要
概要
JRootPane
の背景として画像を表示しています。
Screenshot
Advertisement
サンプルコード
サンプルコード
JFrame frame = new JFrame("@title@") {
@Override protected JRootPane createRootPane() {
JRootPane rp = new JRootPane() {
//private final TexturePaint texture = makeCheckerTexture();
// private final TexturePaint texture = makeCheckerTexture();
@Override protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g.create();
g2.setPaint(texture);
g2.fillRect(0, 0, getWidth(), getHeight());
g2.dispose();
}
#spanadd
#spanend
@Override public void updateUI() {
super.updateUI();
BufferedImage bi = makeBufferedImage("test.jpg");
setBorder(new CentredBackgroundBorder(bi));
setOpaque(false);
}
};
return rp;
}
};
#spandel
//frame.getRootPane().setBackground(Color.BLUE);
#spanend
#spandel
//frame.getLayeredPane().setBackground(Color.GREEN);
#spanend
#spandel
//frame.getContentPane().setBackground(Color.RED);
#spanend
#spandel
((JComponent)frame.getContentPane()).setOpaque(false);
#spanend
#spanadd
// frame.getRootPane().setBackground(Color.BLUE);
#spanend
#spanadd
// frame.getLayeredPane().setBackground(Color.GREEN);
#spanend
#spanadd
// frame.getContentPane().setBackground(Color.RED);
#spanend
#spanadd
((JComponent) frame.getContentPane()).setOpaque(false);
#spanend
frame.setJMenuBar(createMenubar());
frame.getContentPane().add(new MainPanel());
View in GitHub: Java, Kotlin解説
解説
このサンプルでは、JFrame#createRootPane()
メソッドをオーバーライドして、以下の方法で背景に画像を描画するJRootPane
を作成しています。
- 中央の画像: CentredBackgroundBorderを使用
- 背景画像を中央に配置: CentredBackgroundBorderを使用
- チェック柄:
JRootPane#paintComponent(...)
をオーバーライド
- -
JRootPane
の子コンポーネントの透明化、半透明化ContentPane
:setOpaque(false);
で透明化-
JDesktopPane
:setOpaque(false);
で透明化 -
JDesktopPane
:setOpaque(false);
で透明化- 参考: JInternalFrameを半透明にする
NimbusLookAndFeel
には未対応
JMenuBar
:setOpaque(false);
で透明化し、JMenuBar#paintComponent(...)
をオーバーライドして半透明化-
JMenu
,JMenuItem
など:setOpaque(false);
で透明化、LookAndFeel
によって、JMenu#setBackground(new Color(0,0,0,0));
、UIManager.put("Menu.selectionBackground", new Color(0,0,100,100));
などを使用 -
JMenu
,JMenuItem
など:setOpaque(false);
で透明化、LookAndFeel
によってJMenu#setBackground(new Color(0x0, true));
、UIManager.put("Menu.selectionBackground", new Color(0, 0, 100, 100));
などを使用 -
JPopupMenu
: JMenuなどから開くPopupMenuを半透明化などで、半透明化 -
JPopupMenu
: JMenuなどから開くPopupMenuを半透明化などで半透明化