我有一个显示2列的JComboBox。现在我想启用所有列的按键搜索。例如:
Column1 | Column2
A1 | S1
A2 | B1
A3 | P1
第一列上的按键搜索可以正常使用KeyComlectionManager for JComboBox的默认实现。但是,我也希望能够搜索第二列,这意味着当我按下' B'第二个项目被选中。
我看了一下KeySelectionManager,但没有找到任何有用的东西。我附上了ComboBox的截图,以显示我的意思。
感谢您的任何指示。
答案 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()
方法以检查列表中的每个项目是否匹配。