【发布时间】:2015-10-19 09:52:08
【问题描述】:
我使用org.eclipse.jface.viewers.ComboViewer 来显示某些对象的名称。如果我喜欢数百个这样的对象,那么很快就很难找到合适的对象。
默认情况下,ComboViewer 仅过滤第一个输入的“字母”,但这对我来说不是最佳解决方案,因为我可能有名称如下的对象:
"MyObject 1"
"MyObejct 2"
"MyObject 3"
等等。
目前我有这个:
List<MyObject> myObjects = new ArrayList<MyObject>();
myObjects.add(MyObject("One"));
myObjects.add(MyObject("Two"));
myObjects.add(MyObject("ThreeOne"));
myObjects.add(MyObject("ThreeTwo"));
ComboViewer comboViewer = new ComboViewer(parent, SWT.DROP_DOWN | SWT.READ_ONLY);
comboViewer.setContentProvider(ArrayContentProvider.getInstance());
comboViewer.setLabelProider(new LabelProvider(){
@Override
public String getText(final Object element){
if(element instanceof MyObject){
return MyObject.getName();
}
return super.getText(element);
}
comboViewer.setInput(myObjects);
现在我想实现以下目标。
当用户点击“O”时,应在下拉列表中选择 MyObject“One”。当他点击“Th”时,应在下拉列表中选择 MyObject“ThreeOne”。
输入“ThreeT”时,应选择 MyObejct“ThreeTwo”,依此类推。
我希望我的意思很清楚。
我已经尝试过org.eclipse.jface.fieldassist.AutoCompleteField,但这并不总是过滤正确的项目。因为 MyObject 的名称中可能有空格。
带有自动完成或自动建议的简单文本字段对我来说不是一个选项。我需要这个 ComboViewer。
如果您需要任何进一步的信息,请告诉我。
编辑: 我现在已经走了很远。
comboViewer.getCombo().addKeyListener(new KeyListener() {
@Override
public void keyPressed(final KeyEvent e) {
}
@Override
public void keyReleased(final KeyEvent e) {
if (e.keyCode == SWT.ESC) {
myFilter.clearSearchString();
} else if (e.keyCode >= 97 && e.keyCode <= 122) {
myFilter.appendToSearchString(e.character);
} else if (e.keyCode >= 48 && e.keyCode <= 57) {
myFilter.appendToSearchString(e.character);
}
comboViewer.refresh();
}
});
我唯一缺少的是:我想在 ComboViewer 的某处看到输入的文本。
【问题讨论】:
标签: java filter combobox swt jface