java - 如何使 JCombobox 看起来像 JTextField

标签 java swing

有没有一种好的(简单的)方法可以使 JCombobox 看起来像 JTextField? 我的意思是不应该有下拉按钮,但是当用户输入内容时它应该显示多个结果。

基本上与 google、youtube、facebook 等的工作方式相同。

最佳答案

JComboBox comboBox = new JComboBox();
comboBox.setUI(new BasicComboBoxUI() {
    @Override
    protected JButton createArrowButton() {
        return new JButton() {
            @Override
            public int getWidth() {
                return 0;
            }
        };
    }
});

让 getWidth() 返回 0 确保:
a) 按钮未显示
b) 没有为它保留空间,让你输入整个字段

我发现我必须通过 SwingUtilities.invokeLater() 调用 .setUI(),但根据代码的结构,您可能不必这样做.

如果您想要自动完成,请将一些项目添加到组合框中,然后使用 AutoCompleteDecorator.decorate(comboBox)AutoCompleteDecorator 类是 SwingX 的一部分,如前所述。

这可能会使您的盒子在使用另一个 L&F 时看起来很奇怪,因此您必须选择要实例化的 CombiBoxUI,以获得正确的外观。

如果您不希望在组合框中没有任何内容时出现下拉列表,请在 BasicComboBoxUI 中重写此方法:

@Override
public void setPopupVisible(JComboBox c, boolean v) {
    // keeps the popup from coming down if there's nothing in the combo box
    if (c.getItemCount() > 0) {
        super.setPopupVisible(c, v);
    }
}

关于java - 如何使 JCombobox 看起来像 JTextField,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/822432/

相关文章:

java - For 循环强制以修饰符开始

Java数组相加算法

java重绘多个区域

java - Java 中的无框架对话框

Java setShape() 方法在命令提示符下给出错误,但在 Eclipse 上工作正常

java - 将 HTML 样式的 JtextPane 文本中的选定单词设为粗体?

java - log4j 可加性、类别日志记录级别和 appender 阈值

java - 使用 Java 或 Python 将 8 位(16 色调色板)PNG 转换为适当的 4 位(16 色调色板)?

java - Chrome 扩展程序与 Java 应用程序交互

java - ItemListener.itemStateChanged(ItemEvent e)