我正在我的 eclipse-rcp 应用程序中开发一个搜索对话框。
在搜索对话框中,我有一个组合框,如下所示:
comboImp = new CCombo(grpColSpet, SWT.BORDER | SWT.READ_ONLY);
comboImp.setBounds(556, 46, 184, 27);
comboImpViewer = new ComboViewer(comboImp);
comboImpViewer.setContentProvider(new ArrayContentProvider());
comboImpViewer.setInput(ImpContentProvider.getInstance().getImps());
comboImpViewer.setLabelProvider(new LabelProvider() {
@Override
public String getText(Object element) {
return ((Imp)element).getImpName();
}
});
Imp
是一个数据库实体,ManyToOne 是被搜索的主要实体,是ImpContentProvider
通过 jpa/hibernate 与嵌入式 sqlite 数据库对话的模型类。
这个组合框应该包含 的所有实例Imp
,但也允许空选择;它的值绑定到一个服务 bean,如下所示:
IObservableValue comboImpSelectionObserveWidget =
ViewersObservables.observeSingleSelection(comboImpViewer);
IObservableValue filterByImpObserveValue =
BeansObservables.observeValue(searchPrep, "imp");
bindingContext.bindValue(comboImpSelectionObserveWidget, filterByImpObserveValue
, null, null);
一旦用户单击组合,就会进行选择(第一个元素):我可以看到对我在查看器上添加的选择侦听器的调用。我的问题是:
- 做出选择后,如何让用户改变主意并在组合框中有一个空选择?我应该将 Imp 的“假”空实例添加到返回的列表中
ImpContentProvider
吗?还是我应该实施替代方案ArrayContentProvider
?
还有一个相关的问题是:
- 为什么在组合上调用
deselectAll()
andclearSelection()
不会为绑定的 bean 设置空值?