Swing/ButtonWidth のバックアップ(No.8)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/ButtonWidth へ行く。
- 1 (2005-02-03 (木) 02:03:51)
- 2 (2005-04-28 (木) 04:33:03)
- 3 (2005-07-12 (火) 21:45:16)
- 4 (2005-10-09 (日) 18:20:38)
- 5 (2006-02-27 (月) 15:30:14)
- 6 (2006-04-12 (水) 19:35:15)
- 7 (2006-06-15 (木) 17:51:37)
- 8 (2007-07-13 (金) 20:44:02)
- 9 (2007-08-02 (木) 11:15:06)
- 10 (2008-03-21 (金) 19:27:54)
- 11 (2010-12-13 (月) 00:08:51)
- 12 (2011-09-21 (水) 21:54:52)
- 13 (2011-10-02 (日) 17:18:12)
- 14 (2012-04-03 (火) 20:38:57)
- 15 (2012-05-11 (金) 16:43:59)
- 16 (2012-07-19 (木) 21:27:13)
- 17 (2013-04-14 (日) 00:33:29)
- 18 (2013-05-26 (日) 05:26:34)
- 19 (2013-06-12 (水) 15:35:30)
- 20 (2013-10-22 (火) 17:32:41)
- 21 (2014-10-30 (木) 00:06:20)
- 22 (2014-11-27 (木) 17:54:45)
- 23 (2015-06-04 (木) 18:11:16)
- 24 (2015-11-09 (月) 20:55:12)
- 25 (2016-08-08 (月) 14:10:11)
- 26 (2016-09-01 (木) 21:31:57)
- 27 (2017-03-28 (火) 19:26:24)
- 28 (2017-04-04 (火) 14:00:27)
- 29 (2018-02-24 (土) 19:51:30)
- 30 (2018-03-16 (金) 18:24:18)
- 31 (2020-03-18 (水) 22:12:24)
- 32 (2021-09-15 (水) 10:31:09)
TITLE:JButtonなどの高さを変更せずに幅を指定
JButtonなどの高さを変更せずに幅を指定
編集者:Terai Atsuhiro
作成日:2004-11-29
更新日:2021-09-15 (水) 10:31:09
概要
高さはデフォルトのまま幅だけを指定して、JButton、JComboBox、JTextFieldなどのサイズを変更します。
#screenshot
サンプルコード
Dimension dim = button1.getPreferredSize();
button1.setPreferredSize(new Dimension(100, dim.height));
button2.setPreferredSize(new Dimension(100, dim.height));
Box box1 = Box.createHorizontalBox();
box1.add(Box.createHorizontalGlue());
box1.add(button1);
box1.add(Box.createHorizontalStrut(5));
box1.add(button2);
box1.add(Box.createHorizontalStrut(5));
box1.add(Box.createRigidArea(new Dimension(0, dim.height+10)));
- &jnlp;
- &jar;
- &zip;
解説
サンプルの下段のようにJButtonの幅を一定にそろえて水平に並べたい場合や、GridBugLayoutでウエイトを指定するのが面倒といった場合に使用します。
上記のサンプルでは、まずJButtonのUIがフォントサイズや文字列の長さから決めたデフォルトサイズをgetPreferredSize()で取得しています。高さはそのまま利用し、幅だけ一定の値を設定して、新たなデフォルトサイズを作成し、setPreferredSize()しています。これで次からgetPreferredSize()で帰ってくる値は、どちらのボタンでも全く同じになります。
このgetPreferredSize()で得られる値を使用するかどうかは、レイアウトマネージャーによって異なりますが、水平方向にコンポーネントを並べるBoxLayoutの場合、幅はgetPreferredSize()から、高さは各コンポーネントのgetPreferredSize()で得られた中からもっとも大きな値*1を利用するため、パネルに表示してもボタンのサイズは同じになります。
フレームをpack()する前なので、getPreferredSize()ではなく、getSize()でサイズを取得すると、[width=0,height=0]が帰ってきてしまいます。コンポーネントが表示されている場合、getSize()で得られるサイズは、その実際に表示されているサイズになります。
以下はJLabelをgetPreferredSize()した場合の例です。初期状態(preferredSizeがnull)の場合は、JLabelのUIがサイズを計算しています。
JLabel l = new JLabel();
l.setText("a"); //preferredSizeがnullの場合、UIがサイズを計算
//l.getPreferredSize() -> Dimension[width=6,height=13]
l.setText("aaaa"); //JLabelの場合、Fontサイズと文字列の長さなどで決まる
//l.getPreferredSize() -> Dimension[width=24,height=13]
l.setText("<html>aa<br>aa");
//l.getPreferredSize() -> Dimension[width=12,height=26]
l.setPreferredSize(new Dimension(10,10)); //preferredSizeを設定した場合
//l.getPreferredSize() -> Dimension[width=10,height=10]
l.setPreferredSize(null); //preferredSizeをnullに戻した場合
//l.getPreferredSize() -> Dimension[width=12,height=26]