【问题标题】:Make a JComboBox editable without affecting its width使 JComboBox 可编辑而不影响其宽度
【发布时间】:2011-10-11 06:52:20
【问题描述】:

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

JComboBoxJPanelFlowLayout 中,但我认为这无关紧要,因为更改JPanel 的宽度不会影响JComboBox 的宽度。

【问题讨论】:

  • 到目前为止,我发现产生所需行为的唯一方法是:comboBox.setPreferredSize(new java.awt.Dimension(50, 22));
  • “唯一的方法”是什么意思。我为您提供了一个解决方案,允许您指定要显示的字符数,因此您不必对实际尺寸进行硬编码。
  • 我很抱歉。当我最初尝试您的解决方案时,我在运行 pack() 之前运行 comboBox.setEditable(true),这导致代码无法工作。当我在pack() 之后移动它时,您的代码按预期工作。我不知道为什么它会有所作为......

标签: java swing width jcombobox


【解决方案1】:

嗯...我无法在我的 Mac 上提示此行为,但您可以尝试创建/添加组合框,然后调用

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

【讨论】:

  • box.setSize(size) 不会为我永久更改 jComboBox 的宽度。只要pack()setVisible(true) 出现,框的大小就会返回到之前的值。甚至 setMaximumSize(size)setMinimumSize(size) 也会被忽略。
【解决方案2】:
【解决方案3】:

JTextField 具有默认的首选大小。看起来如果这个大小大于首选渲染大小,则使用文本字段大小。您可以通过指定要在文本字段中显示的列数来更改首选大小。因此,您需要使用以下代码来操作编辑器:

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

【讨论】:

    猜你喜欢
    • 2012-01-16
    • 1970-01-01
    • 2010-12-19
    • 2014-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-05
    • 1970-01-01
    相关资源
    最近更新 更多