Swing/OptionPaneSeparatorPadding のバックアップ(No.2)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/OptionPaneSeparatorPadding へ行く。
- 1 (2024-12-16 (月) 01:56:20)
- 2 (2024-12-16 (月) 14:11:47)
- category: swing folder: OptionPaneSeparatorPadding title: JOptionPaneのメッセージエリアとボタンエリアの間の内余白を変更する tags: [JOptionPane, NimbusLookAndFeel] author: aterai pubdate: 2024-12-16T01:54:36+09:00 description: NimbusLookAndFeelのJOptionPaneでそのメッセージエリアとボタンエリアの間の内余白や全体の外余白を変更します。 image: https://drive.google.com/uc?id=1EIQNyh8JYazie0dhndQG2Qc-oZyfFzZH
概要
NimbusLookAndFeel
のJOptionPane
でそのメッセージエリアとボタンエリアの間の内余白や全体の外余白を変更します。
Screenshot
Advertisement
サンプルコード
JOptionPane op = makeOptionPane();
JButton button = new JButton("separatorPadding");
button.addActionListener(e -> {
UIDefaults d = new UIDefaults();
int p = padding.getNumber().intValue();
d.put("OptionPane.separatorPadding", p);
int m = margin.getNumber().intValue();
d.put("OptionPane.contentMargins", new InsetsUIResource(m, m, m, m));
op.putClientProperty("Nimbus.Overrides", d);
op.putClientProperty("Nimbus.Overrides.InheritDefaults", Boolean.TRUE);
SwingUtilities.updateComponentTreeUI(op);
String t1 = "separatorPadding: " + p;
String t2 = "contentMargins: " + m;
JDialog dialog = op.createDialog(getRootPane(), t1 + " / " + t2);
dialog.setVisible(true);
});
View in GitHub: Java, Kotlin解説
OptionPane.separatorPadding
JOptionPane
のメッセージエリアとボタンエリアの間の内余白を設定NimbusLookAndFeel
(SynthLookAndFeel
)でのみ有効- 以下のように
Box.createVerticalStrut(UIManager.getInt("OptionPane.separatorPadding"))
で不可視の高さ固定コンポーネントが作成される - 名前が
setName("OptionPane.separator")
のJSeparator
もこのVerticalStrut
の上に挿入される? JOptionPane
のアイコンとメッセージエリアの間に同名setName("OptionPane.separator")
のJPanel
が挿入されるがその幅は固定new Dimension(15, 1)
でOptionPane.separatorPadding
の設定とは無関係
// javax/swing/plaf/synth/SynthOptionPaneUI.java
@Override protected void installComponents() {
optionPane.add(createMessageArea());
Container separator = createSeparator();
if (separator != null) {
optionPane.add(separator);
SynthContext context = getContext(optionPane, ENABLED);
optionPane.add(Box.createVerticalStrut(context.getStyle().
getInt(context, "OptionPane.separatorPadding", 6)));
}
optionPane.add(createButtonArea());
optionPane.applyComponentOrientation(optionPane.getComponentOrientation());
}
OptionPane.contentMargins
JOptionPane
本体の外余白を設定NimbusLookAndFeel
(SynthLookAndFeel
)でのみ有効、その他のLookAndFeel
ではJOptionPane#setBorder(BorderFactory.createEmptyBorder(...))
などで変更?NimbusDefaults
で設定されているOptionPane:\"OptionPane.separator\".contentMargins
は変更しても効果がない?- 同名のコンポーネントが
2
つ存在するから?
- 同名のコンポーネントが
- 同じく
OptionPane:\"OptionPane.messageArea\".contentMargins
やOptionPane:\"OptionPane.messageArea\":\"OptionPane.label\".contentMargins
を変更しても初期値から変更不可能?