JOptionPaneのメッセージエリアとボタンエリアの間の内余白を変更する
Total: 35
, Today: 2
, Yesterday: 3
Posted by aterai at
Last-modified:
概要
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
)でのみ有効NimbusLookAndFeel
での初期値は0
- 以下のように
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(...))
などで変更?NimbusLookAndFeel
での初期値はnew InsetsUIResource(15, 15, 15, 15)
NimbusDefaults
で設定されているOptionPane:\"OptionPane.separator\".contentMargins
は変更しても効果がない?- 同名のコンポーネントが
2
つ存在するから?
- 同名のコンポーネントが
- 同じく
OptionPane:\"OptionPane.messageArea\".contentMargins
やOptionPane:\"OptionPane.messageArea\":\"OptionPane.label\".contentMargins
を変更しても初期値から変更不可能?