2011-07-22 44 views
3

我在我的JFrame中有一个JComboBox对象,其行为与预期完全相同。但是,我想让它可编辑,以便用户可以根据需要输入其他值。不幸的是,使用setEditable(true)启用编辑会导致其宽度显着增加。我如何允许编辑JComboBox,同时保持宽度只有最大可选项目所需的宽度?在不影响宽度的情况下编辑JComboBox

JComboBox是与FlowLayout一个JPanel,但是我不认为这是相关的,因为改变JPanel的宽度不影响JComboBox的宽度。

uneditable jComboBoxeditable jComboBox

+0

到目前为止,我发现产生期望的行为的唯一方法是: 'comboBox.setPreferredSize(新java.awt.Dimension中(50,22)) ;' –

+0

你是什么意思“唯一的方法”。我给了你一个解决方案,允许你指定你想要显示的字符数,所以你不必硬编码实际的尺寸。 – camickr

+0

我的歉意。当我最初尝试你的解决方案时,我在运行'pack()'之前运行'comboBox.setEditable(true)',导致代码无法工作。当我在'pack()'之后移动它时,您的代码按预期工作。我不确定它为什么会有所作为... –

回答

3

一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

相关问题