gui*_*ido 1 java data-binding combobox jface eclipse-rcp
我正在我的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();
}
});
Run Code Online (Sandbox Code Playgroud)
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);
Run Code Online (Sandbox Code Playgroud)
一旦用户点击组合,就会产生一个选择(第一个元素):我可以看到对我在查看器上添加的selectionlistener的调用.我的问题是:
ImpContentProvider
?返回的列表中吗?或者我应该实施替代方案ArrayContentProvider
?另外一个相关问题是:
deselectAll()
和clearSelection()
组合不会为绑定bean设置空值?ComboViewer.setSelection(StructuredSelection.EMPTY)
将触发选择事件并将"imp"设置为null.组合小部件选择事件仅在我认为从下拉列表中手动选择时触发.
使用转换器
定义空选择obj,让我们说EMPTYEnum(在标签提供者中显示空字符串)
您可以定义UpdateValueStrategy
目标到模型,并IConverter
在绑定observable时进行设置.在转换器中,您可以将EMPTYEnum转换为null.
IConverter:
fromType: Object.class
toType: Object.class
public Object convert(Object fromObject)
{
if(fromObject instanceof EMPTYEnum)
{
return null;
}
return fromObject;
}
Run Code Online (Sandbox Code Playgroud)