0

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

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

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

4

3 回答 3

2

您正在寻找自动完成功能(我理解这个问题):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

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

于 2012-10-15T09:51:27.033 回答
1

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

您可以放入JTableJComboBox但默认情况下,您只能从整JTables行中选择值,而不是直接从JTables Cell(需要额外的解决方法,尚未尝试)

于 2012-05-28T12:41:36.050 回答
1

我也在寻找这个答案

这是我到目前为止的尝试..我创建Jpopup并将Jtable放在那里..然后我使用jlabel而不是jcombobox,当用户单击jlabel时,弹出(Jtable)将显示在该jlabel位置..当用户在jtable上选择值时,然后弹出窗口将处理,然后 jlabel 将显示结果..

对于您的情况,您可以使用 jtextfield 而不是 jlabel

编辑:继承人相关问题 在此处输入链接描述

于 2012-10-15T06:21:39.887 回答