Swing/OptionPaneBackground のバックアップ(No.2)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/OptionPaneBackground へ行く。
- 1 (2020-04-27 (月) 18:45:54)
- 2 (2021-10-28 (木) 03:21:40)
- category: swing folder: OptionPaneBackground title: JOptionPaneの背景色を変更する tags: [JOptionPane, JPanel] author: aterai pubdate: 2020-04-27T18:44:33+09:00 description: JOptionPaneで使用されている子JPanelをすべて透明化して背景色を指定した色に変更します。 image: https://drive.google.com/uc?id=1jUaaox2WyFYAqVow6MbfH7o9rGY-7WqC
概要
JOptionPane
で使用されている子JPanel
をすべて透明化して背景色を指定した色に変更します。
Screenshot
Advertisement
サンプルコード
UIManager.put("OptionPane.background", Color.LIGHT_GRAY);
String txt = "<html>JOptionPane:<br><li>messageArea<li>realBody<li>separator<li>body<li>buttonArea";
String title = "Title";
int type = JOptionPane.WARNING_MESSAGE;
JLabel label = new JLabel(txt);
label.addHierarchyListener(e -> {
Component c = e.getComponent();
if ((e.getChangeFlags() & HierarchyEvent.SHOWING_CHANGED) != 0 && c.isShowing()) {
stream(SwingUtilities.getAncestorOfClass(JOptionPane.class, c))
.filter(JPanel.class::isInstance)
.map(JPanel.class::cast) // TEST: .peek(cc -> System.out.println(cc.getName()))
.forEach(p -> p.setOpaque(false));
}
});
JButton b2 = new JButton("background");
b2.addActionListener(e -> JOptionPane.showMessageDialog(b2.getRootPane(), label, title, type));
View in GitHub: Java, Kotlin解説
default
UIManager.put("OptionPane.background", Color.LIGHT_GRAY)
でJOptionPane
の背景色を変更JOptionPane
で使用されている子JPanel
が不透明のため、フチの色のみ変更される
background
UIManager.put("OptionPane.background", Color.LIGHT_GRAY)
でJOptionPane
の背景色を変更- メッセージ用コンポーネントに
HierarchyListener
を追加してJOptionPane
のオープンイベントを取得 JOptionPane
が表示状態になったらその子JPanel
を検索し、すべてsetOpaque(false)
で透明化- デフォルトの
JOptionPane
は以下の名前の5
つのJPanel
で構成されているOptionPane.messageArea
OptionPane.realBody
OptionPane.separator
OptionPane.body
OptionPane.buttonArea
override
JOptionPane.paintComponent(...)
をオーバーライドして背景を任意のTexture
に変更JOptionPane
の子JPanel
を検索し、すべてsetOpaque(false)
で透明化