【发布时间】:2012-09-27 02:17:03
【问题描述】:
我正在我的 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()和clearSelection()不会为绑定的 bean 设置空值?
【问题讨论】:
-
有趣!!..看起来是个问题。对于您的问题,您可以在 Bean 中将“imp”值设置为 null 吗?它将清除组合查看器选择,因为它绑定到组合查看器选择
-
如果我在 bean 中将“imp”设置为 null,则组合正确设置为空选择;但是我想要一种 gui 方式将其设置为空(除了我已经拥有的“清除表单”按钮)。
-
正确。尝试在 Comboviewer 上设置空选择,它将触发带有 null 值的 selectionevent。
-
@sambi reddy 抱歉,我无法理解您的最后评论。让我澄清一下:我希望用户单击组合中的一个空项目,使选择为空,bean 属性为空。 (我已经可以通过编程方式完成,但我需要在 gui 中完成)
标签: java data-binding combobox eclipse-rcp jface