---
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
---
* 概要 [#summary]
`NimbusLookAndFeel`で`JOptionPane`を使用した場合、その`JButton`のサイズを揃えるかどうかを設定します。[https://stackoverflow.com/questions/30138984/joptionpane-button-size-nimbus-laf java - JOptionPane button size (Nimbus LAF) - Stack Overflow]の回答を参考にしています。

#download(https://lh3.googleusercontent.com/-vidT_rr0mcE/VU97kF6HGpI/AAAAAAAAN4A/ByrWGh41AQg/s800/SameSizeButtons.png)

* サンプルコード [#sourcecode]
#code(link){{
UIManager.getLookAndFeelDefaults().put("OptionPane.sameSizeButtons", true);
}}

* 解説 [#explanation]
- `default`
-- デフォルトの`NimbusLookAndFeel`で`JOptionPane`が使用する`JButton`のサイズは、各ボタンのテキストの長さに依存する
-- デフォルトの`NimbusLookAndFeel`で`JOptionPane`が使用する`JButton`のサイズは各ボタンのテキストの長さに依存する
- `SameSizeButtons`
-- `UIManager.getLookAndFeelDefaults().put("OptionPane.sameSizeButtons", true)`で、最も長いボタンテキストから作成される`JButton`のサイズに揃えられる
-- `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`でテスト)
-- このサンプルでは実行中にこれらを切り替えるテストを行うために`UIManager.getLookAndFeelDefaults()`で取得した`UIDefaults`ではなく、以下のように新規作成した`UIDefaults`に`OptionPane.sameSizeButtons`を設定して`JOptionPane`に上書きし`SwingUtilities.updateComponentTreeUI(JOptionPane)`で`UI`を更新している(`OptionPane.buttonAreaBorder`でテスト)
#code{{
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);
}}

* 参考リンク [#reference]
- [https://stackoverflow.com/questions/30138984/joptionpane-button-size-nimbus-laf java - JOptionPane button size (Nimbus LAF) - Stack Overflow]
- [https://docs.oracle.com/javase/jp/8/docs/api/javax/swing/plaf/synth/doc-files/componentProperties.html SynthLookAndFeelでのコンポーネント固有のプロパティ]
- [[Nimbusの外観をUIDefaultsで変更する>Swing/UIDefaultsOverrides]]
- [[JButtonなどの高さを変更せずに幅を指定>Swing/ButtonWidth]]

* コメント [#comment]
#comment
#comment