2011-07-22 19 views
3

私はオブジェクトを私のJFrameに持っています。ただし、必要に応じてユーザーが代替値を入力できるように編集可能にしたいと考えています。残念ながら、setEditable(true)を使用して編集を有効にすると、幅が大幅に増加します。どのようにして幅が最大の選択可能なアイテムの幅と同じに保ちながらJComboBoxの編集を許可することができますか?幅に影響を与えずにJComboBoxを編集可能にします。

JComboBoxFlowLayoutJPanelであるJPanelの幅を変更するとJComboBoxの幅に影響を与えませんので、しかし、私はこれが関連しているとは思いません。

uneditable jComboBoxeditable jComboBox

+0

これまでのところ、私は必要な動作を生成することが分かっ唯一の方法は次のとおりです。 'comboBox.setPreferredSize(新しいjava.awt.Dimension(50、22)) ; ' –

+0

「唯一の方法」とはどういう意味ですか?表示する文字数を指定できるソリューションを提供しました。実際の次元をハードコードする必要はありません。 – camickr

+0

申し訳ありません。私が最初にあなたのソリューションを試してみたとき、コードを動作させない 'pack()'を実行する前に 'comboBox.setEditable(true)'を実行していました。 'pack()'の後に移動したとき、あなたのコードは意図した通りに動作しました。私はなぜ違いがあるのか​​分かりません... –

答えて

3

A呼び出しますJTextFieldには、デフォルトの推奨サイズがあります。このサイズが好ましいレンダリングサイズよりも大きい場合は、テキストフィールドサイズが使用されるように見えます。テキストフィールドに表示する列の数を指定することにより、優先サイズを変更できます。だからあなたのようなコードを何かでエディタを操作する必要があります。

JComboBox comboBox = new JComboBox(...); 
comboBox.setEditable(true); 
ComboBoxEditor editor = comboBox.getEditor(); 
JTextField textField = (JTextField)editor.getEditorComponent(); 
textField.setColumns(3); 
2

うーん...私は私のMac上で、この動作を要求することはできませんが、コンボボックスを追加/作成してみてくださいかもしれないが、その後、

Dimension size = box.getSize(); 
box.setEditable(true); 
box.setSize(size); // or box.setMaximumSize(size); 
+0

'box.setSize(size)'はjComboBoxの幅を永久に変更しません。 'pack()'または 'setVisible(true)'が発生するとすぐに、ボックスのサイズは以前の値に戻ります。 'setMaximumSize(size)'と 'setMinimumSize(size)'も無視されます。 –

5
+0

さまざまな値を試しましたが、どれも 'JComboBox'の幅に影響しませんでした。 –

+0

@Altay_H http://stackoverflow.com/questions/3194958/fast-replacement-for-jcombobox-basiccomboboxui、http://stackoverflow.com/questions/5225025/how-to-apply-another-layoutmanager-to-a -jcombobox-multi-column-jcombobox-attemp、http://stackoverflow.com/questions/6242341/jcombobox-change-drop-down-popup、 – mKorbel

関連する問題