在jCombobox上实现autoComplete

时间:2014-01-21 13:24:50

标签: java swing autocomplete jcombobox listcellrenderer

我有一个拥有国家/地区列表的jCombobox。它由数据库填充并包含countryID和countryName,因此只有国家名称显示在组合框中,但是当单击某个值时,它将返回所选国家/地区的ID。我已设法使用自定义ListCellRenderer实现此目的。

public class UGIS_ComboboxRenderer extends JLabel implements ListCellRenderer {

@Override
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
    Object[] itemData = (Object[]) value;
    setText((String) itemData[1]);
    return this;
}
}

单个国家/地区对象看起来与此类似

Object[] country1 = new Country(){1, "United Kingdom"}

我有一个像上面这样的对象的ArrayList,并将它们添加到像这样的组合框

for (Object[] temp : countrylist) {
        jComboBox1.addItem(temp); 
                }

现在我想要的是为这个组合框提供一个自动完成功能,以便用户可以输入国家名称并有效地导航到组合框列表中的“感兴趣区域”。关于如何实现这个的任何想法?

2 个答案:

答案 0 :(得分:2)

  

现在我想要的是为这个组合框设置一个自动完成功能,以便用户可以输入国家名称并有效导航到组合框列表中的“感兴趣区域”

这是JComboBox的默认功能。当您键入字符时,选择将移动到列表中包含这些字符的项目。

  

它由数据库填充并包含countryID和countryName,因此只有国家名称显示在组合框中,但是当点击某个值时,它将返回所选国家/地区的ID。我已设法使用自定义ListCellRenderer实现此目的。

自定义渲染器会破坏默认功能,如上所述。

有关同时实现KeySelectionManager的解决方案,请参阅Combo Box With Custom Renderer,以便键盘选择功能仍可用。

答案 1 :(得分:0)

阅读this tutorial of Autocomplete

一旦你完成了这个,你可以做一些像......

this.countries = new JComboBox(new Object[] {"United States", "United Kingdom", "Canada", "Mexico"});
AutoCompleteDecorate.decorate(this.countries);