JOptionPaneで使用するボタンのサイズを揃える
Total: 5467
, Today: 1
, Yesterday: 4
Posted by aterai at
Last-modified:
概要
NimbusLookAndFeel
でJOptionPane
を使用した場合、そのJButton
のサイズを揃えるかどうかを設定します。java - JOptionPane button size (Nimbus LAF) - Stack Overflowの回答を参考にしています。
Screenshot
Advertisement
サンプルコード
UIManager.getLookAndFeelDefaults().put("OptionPane.sameSizeButtons", true);
View in GitHub: Java, Kotlin解説
default
- デフォルトの
NimbusLookAndFeel
でJOptionPane
が使用するJButton
のサイズは各ボタンのテキストの長さに依存する
- デフォルトの
SameSizeButtons
UIManager.getLookAndFeelDefaults().put("OptionPane.sameSizeButtons", true)
で最も長いボタンテキストから作成されるJButton
のサイズに揃えられるOptionPane.sameSizeButtons
の設定はLookAndFeel
に依存し、たとえばMetalLookAndFeel
ではOptionPane.sameSizeButtons
の設定を無視してJOptionPane
のボタンは常に同じサイズになる- このサンプルでは実行中にこれらを切り替えるテストを行うために
UIManager.getLookAndFeelDefaults()
で取得したUIDefaults
ではなく、以下のように新規作成したUIDefaults
にOptionPane.sameSizeButtons
を設定してJOptionPane
に上書きしSwingUtilities.updateComponentTreeUI(JOptionPane)
でUI
を更新している(OptionPane.buttonAreaBorder
でテスト)UIDefaults d = new UIDefaults(); d.put("OptionPane.sameSizeButtons", true); op.putClientProperty("Nimbus.Overrides", d); op.putClientProperty("Nimbus.Overrides.InheritDefaults", true); SwingUtilities.updateComponentTreeUI(op); op.createDialog(getRootPane(), "title").setVisible(true);
参考リンク
- java - JOptionPane button size (Nimbus LAF) - Stack Overflow
- SynthLookAndFeelでのコンポーネント固有のプロパティ
- Nimbusの外観をUIDefaultsで変更する
- JButtonなどの高さを変更せずに幅を指定