• category: swing folder: SameSizeButtons title: JOptionPaneで使用するボタンのサイズを揃える tags: [JOptionPane, JButton, UIManager, NimbusLookAndFeel] author: aterai pubdate: 2015-05-11T00:39:58+09:00 description: NimbusLookAndFeelでJOptionPaneを使用した場合、そのJButtonのサイズを揃えるかどうかを設定します。 image: https://lh3.googleusercontent.com/-vidT_rr0mcE/VU97kF6HGpI/AAAAAAAAN4A/ByrWGh41AQg/s800/SameSizeButtons.png

概要

NimbusLookAndFeelJOptionPaneを使用した場合、そのJButtonのサイズを揃えるかどうかを設定します。java - JOptionPane button size (Nimbus LAF) - Stack Overflowの回答を参考にしています。

サンプルコード

UIManager.getLookAndFeelDefaults().put("OptionPane.sameSizeButtons", true);
View in GitHub: Java, Kotlin

解説

  • default
    • デフォルトのNimbusLookAndFeelJOptionPaneが使用するJButtonのサイズは、各ボタンのテキストの長さに依存する
  • SameSizeButtons
    • UIManager.getLookAndFeelDefaults().put("OptionPane.sameSizeButtons", true)で、最も長いボタンテキストから作成されるJButtonのサイズに揃えられる
    • OptionPane.sameSizeButtonsの設定はLookAndFeelに依存し、たとえばMetalLookAndFeelではOptionPane.sameSizeButtonsの設定を無視してJOptionPaneのボタンは常に同じサイズになる
    • 注: このサンプルでは実行中にこれらを切り替えるテストを行うためにUIManager.getLookAndFeelDefaults()で取得したUIDefaultsではなく、以下のように新規作成したUIDefaultsOptionPane.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);
      

参考リンク

コメント