您正在寻找自动完成功能(我理解这个问题):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 (加上相应的文档/来源,如果感兴趣)