java - 2 列组合框

标签 java swing jcombobox

我经常使用多列 jcombobox,但还没有找到任何也没有设法制作自己的。我尝试了网上找到的几种方法,但都没有奏效。后来我在某处读到那些(旧的)在当前的 Java 版本下不起作用。

到目前为止,我已经成功地制作了自己的组合框,该组合框有一个表作为下拉列表,我可以用鼠标选择一个项目,但目标是当用户开始在编辑框中输入内容时,下拉列表打开并且光标根据用户编写的文本移动。似乎来自例如的事件JTextField editor = (JTextField)comboBox.getEditor().getEditorComponent() 不起作用。

有没有人设法制作一个两列组合框或有任何想法,我如何在用户开始键入时获取事件。

最佳答案

您正在寻找自动完成功能(据我理解这个问题):它在 SwingX 中受支持- 而且非常容易使用。

它归结为实现一个自定义的 ObjectToStringConverter 并使用该转换器使用 autoCompleteDecorator 配置组合框。像这样的东西:

/**
 *  A converter which expects an item of an array type and returns
 *  a string representation of its first value. 
 */
public static class ArrayToStringConverter extends ObjectToStringConverter {

    @Override
    public String getPreferredStringForItem(Object item) {
        if (!(item instanceof Object[])) return DEFAULT_IMPLEMENTATION.getPreferredStringForItem(item);
        Object[] array = (Object[]) item;
        return DEFAULT_IMPLEMENTATION.getPreferredStringForItem(array[0]);
    }

}

// usage
// assuming an model with items being arrays 
JComboBox combo = new JComboBox(arrayModel);
// the renderer supporting multiple columns, f.i. a table
combo.setCellRenderer(new TabularListRenderer());
AutoCompleteDecorator.decorate(combo, new ArrayToStringConverter());

完整的工作示例(包括渲染器并展示如何强制弹出窗口的宽度大于组合本身)是 TableAsListRenderer in my incubator section

顺便说一句:自动完成功能是一个独立模块,可以通过 Maven 访问或从 maven rep at java.net 手动下载。 ,您需要 swingx-autocomplete-1.6.4.jar(加上相应的文档/源代码,如果有兴趣)

关于java - 2 列组合框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10784768/

相关文章:

Java 阻止 JComponent 的焦点

Java:组件在事件发生后消失

java - JTextArea 问题

java - 取消选择 JRadioButton

java - jcombobox 在拖放中被选中

java - 每次插入行时Sql更新列

java - JCheckBox 搞乱了 JTable 的选择

java - JTextArea 不调整大小

java - 使用 JComboBox 计算 JTable 中的运行总计

java - 将第三方托管的 http 图像 url 动态转换为 https url