0

我有一个包含国家/地区列表的 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); 
                }

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

4

2 回答 2

2

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

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

它由数据库填充并包含 countryID 和 countryName,因此组合框中仅显示国家名称,但是当单击一个值时,它将返回所选国家的 ID。我已经设法使用自定义 ListCellRenderer 实现了这一点。

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

有关还实现 KeySelectionManager 的解决方案,请参阅带有自定义渲染器的组合框,以便键盘选择功能仍然有效。

于 2014-01-21T17:13:05.783 回答
0

阅读本教程 Autocomplete

一旦你完成了那个,你可以做类似的事情......

this.countries = new JComboBox(new Object[] {"United States", "United Kingdom", "Canada", "Mexico"});
AutoCompleteDecorate.decorate(this.countries);
于 2014-01-21T13:30:38.207 回答