Swing/RootPaneBackground の変更点
- 追加された行はこの色です。
- 削除された行はこの色です。
- Swing/RootPaneBackground へ行く。
- Swing/RootPaneBackground の差分を削除
--- 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: https://lh6.googleusercontent.com/-2HEcpl-4XqA/UOmSieyPnxI/AAAAAAAABaI/KBA4i6QGH3E/s800/RootPaneBackground.png --- * 概要 [#summary] `JRootPane`の背景として画像を表示しています。 #download(https://lh6.googleusercontent.com/-2HEcpl-4XqA/UOmSieyPnxI/AAAAAAAABaI/KBA4i6QGH3E/s800/RootPaneBackground.png) * サンプルコード [#sourcecode] #code(link){{ JFrame frame = new JFrame("@title@") { @Override protected JRootPane createRootPane() { JRootPane rp = new JRootPane() { // 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(); } @Override public void updateUI() { super.updateUI(); BufferedImage bi = makeBufferedImage("test.jpg"); setBorder(new CentredBackgroundBorder(bi)); setOpaque(false); } }; return rp; } }; // frame.getRootPane().setBackground(Color.BLUE); // frame.getLayeredPane().setBackground(Color.GREEN); // frame.getContentPane().setBackground(Color.RED); ((JComponent) frame.getContentPane()).setOpaque(false); frame.setJMenuBar(createMenubar()); frame.getContentPane().add(new MainPanel()); }} * 解説 [#explanation] このサンプルでは、`JFrame#createRootPane()`メソッドをオーバーライドして、以下の方法で背景に画像を描画する`JRootPane`を作成しています。 - 背景画像を中央に配置: [https://community.oracle.com/thread/1395763 CentredBackgroundBorder]を使用 - チェック柄: `JRootPane#paintComponent(...)`をオーバーライド ---- - `JRootPane`の子コンポーネントの透明化、半透明化 -- `ContentPane`: `setOpaque(false);`で透明化 -- `JDesktopPane`: `setOpaque(false);`で透明化 --- 参考: [[JInternalFrameを半透明にする>Swing/TransparentFrame]] --- `NimbusLookAndFeel`には未対応 -- `JMenuBar`: `setOpaque(false);`で透明化し、`JMenuBar#paintComponent(...)`をオーバーライドして半透明化 -- `JMenu`, `JMenuItem`など: `setOpaque(false);`で透明化、`LookAndFeel`によって、`JMenu#setBackground(new Color(0x0, true));`、`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));`などを使用 --- 参考: [[JMenuBarの背景に画像を表示する>Swing/MenuBarBackground]] -- `JPopupMenu`: [[JMenuなどから開くPopupMenuを半透明化>Swing/TranslucentSubMenu]]などで、半透明化 -- `JPopupMenu`: [[JMenuなどから開くPopupMenuを半透明化>Swing/TranslucentSubMenu]]などで半透明化 * 参考リンク [#reference] - [https://community.oracle.com/thread/1395763 Swing - How can I use TextArea with Background Picture ?] -- [[JTextAreaの背景に画像を表示>Swing/CentredBackgroundBorder]] * コメント [#comment] #comment #comment