具有多列的ComboBox - 按键搜索

时间:2015-08-12 13:19:02

标签: java swing jcombobox

我有一个显示2列的JComboBox。现在我想启用所有列的按键搜索。例如:

Column1 | Column2
A1      | S1
A2      | B1
A3      | P1

第一列上的按键搜索可以正常使用KeyComlectionManager for JComboBox的默认实现。但是,我也希望能够搜索第二列,这意味着当我按下' B'第二个项目被选中。

我看了一下KeySelectionManager,但没有找到任何有用的东西。我附上了ComboBox的截图,以显示我的意思。

感谢您的任何指示。

enter image description here

2 个答案:

答案 0 :(得分:3)

检查JComboBox源代码中的KeySelectionManager实现

class DefaultKeySelectionManager implements KeySelectionManager, Serializable {
    public int selectionForKey(char aKey,ComboBoxModel aModel) {
....
       for ( i = ++currentSelection, c = aModel.getSize() ; i < c ; i++ ) {
            Object elem = aModel.getElementAt(i);
            if (elem != null && elem.toString() != null) {
                v = elem.toString().toLowerCase();
                if ( v.length() > 0 && v.charAt(0) == aKey )
                    return i;
            }
        }

因此,请尝试覆盖模型的Element的类toString()方法以包含两列。

答案 1 :(得分:1)

如果在组合框中显示两列,则必须使用自定义渲染器。

因此,Combo Box With Custom Renderer中提出的方法可能有所帮助。博客中的解决方案将渲染器和KeySelectionManager组合到一个类中。您需要做的就是实现getDisplayValue()方法将文本返回到渲染器。

在您的情况下,您有两段要呈现和搜索的文本,因此您可以只更改getDisplayValue()方法以返回要显示的文本列表。

然后渲染器可以使用List中的两个项目,并且还将修改类的getNextMatch()方法以检查列表中的每个项目是否匹配。