---
category: swing
folder: SetColumns
title: JComboBoxなどの幅をカラム数で指定
tags: [JTextField, JPasswordField, JSpinner, JComboBox]
author: aterai
pubdate: 2006-12-18T16:11:14+09:00
description: JTextField,JPasswordField,JSpinner,JComboBoxの幅をカラム数で指定して比較しています。
image: https://lh3.googleusercontent.com/_9Z4BYR88imo/TQTS72PP0tI/AAAAAAAAAjk/RRG_w2fJBtA/s800/SetColumns.png
---
* 概要 [#summary]
`JTextField`,`JPasswordField`,`JSpinner`,`JComboBox`の幅をカラム数で指定して比較しています。

#download(https://lh3.googleusercontent.com/_9Z4BYR88imo/TQTS72PP0tI/AAAAAAAAAjk/RRG_w2fJBtA/s800/SetColumns.png)

* サンプルコード [#sourcecode]
#code(link){{
JTextField field = new JTextField(20);
JPasswordField passwd = new JPasswordField(20);
JSpinner.DefaultEditor e = (JSpinner.DefaultEditor) spinner.getEditor();
e.getTextField().setColumns(20);
combo1.setEditable(true);
Component c = combo1.getEditor().getEditorComponent();
if (c instanceof JTextField) {
  ((JTextField) c).setColumns(20);
}
}}

* 解説 [#explanation]
上記のサンプルでは、要素が空の`JComboBox`などのカラム幅を同じ(`20`文字分の幅)にして(下二つは`default`のまま)以下のような順番で並べています。

+ `JTextField#setColumns(20)`
+ `JPasswordField#setColumns(20)`
+ `JSpinner#setColumns(20)`
+ `JComboBox#setEditable(true)`、`JComboBox#setColumns(20)`
+ `JComboBox#setEditable(true)`、`default`
+ `JComboBox#setEditable(false)`、`default`

- スクリーンショット左: `JDK 1.6.0`、`WindowsLookAndFeel`
-- `setColumns(20)`を設定した入力欄の幅は揃っている
-- `JComboBox`で`setColumns`を使用していないデフォルトの状態では、モデル中のアイテムから最大の幅が適用される
-- `JComboBox`で`setColumns(...)`を適用していないデフォルトの状態では、モデル中のアイテムから最大の幅が適用される
--- モデルが空の場合は[[JComboBoxのセルサイズを決定するためのプロトタイプ値を設定する>Swing/PrototypeDisplayValue]]のようにプロトタイプ値を設定しておく必要がある
- スクリーンショット右: `JDK 1.5.0_10`、`WindowsLookAndFeel`
-- 各入力欄の幅、高さ、余白が不揃い
--- `JTextField`の左内余白が広すぎる
--- `JComboBox`などの左内余白が狭すぎる
-- レイアウトマネージャーで工夫するか`setPreferredSize(Dimension)`を使って幅を揃える必要がある
--- 参考: [[JButtonなどの高さを変更せずに幅を指定>Swing/ButtonWidth]]

* 参考リンク [#reference]
- [[JButtonなどの高さを変更せずに幅を指定>Swing/ButtonWidth]]
- [[JComboBoxのセルサイズを決定するためのプロトタイプ値を設定する>Swing/PrototypeDisplayValue]]

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