swt/jface数据绑定:PojoProperties与PojoObservable



我正在编写一个JFace对话框,我想对模型对象使用数据处理。

通过查看代码,我可以看到,有时我会发现用于构建绑定的PojoProperties,而其他时候则使用PojoObservables

看着Javadoc,我可以阅读:

PojoObservables:为POJO(普通的旧java对象)创建可观察对象的工厂,这些对象符合带有getter和setter的对象的概念,但不提供更改时的属性更改事件。

PojoProperties:为POJO(普通的旧Java对象)创建属性的工厂,这些POJO符合带有getter和setter的对象的概念,但不提供更改时的属性更改事件。

同样的问题也适用于BeansObservablesBeansProperties之间存在的差异

(明显的)区别似乎是可观察的允许观察对象,属性允许观察属性,但由于Pojo的数据有一个getter和一个setter,它们之间的区别是什么?我应该在对话中选择哪一个?

以下是代码摘录:

POJO:

public class DataObject {
private String m_value;
public String getValue() {
return m_value;
}
public void setValue(String i_value) {
m_value = i_value;
}
}

对话框(相关部分):

@Override
protected Control createDialogArea(Composite parent) {
Composite container = (Composite) super.createDialogArea(parent);
m_combo = new Combo(container, SWT.BORDER);
m_comboViewer = new ComboViewer(container, SWT.NONE);
}

绑定(相关部分):

// using PojoObservable
IObservableValue observeValue = PojoObservables.observeValue(m_dataObject, "value");
IObservableValue observeWidget = SWTObservables.observeSelection(m_combo);
// using PojoProperties
IObservableValue observeValue = PojoProperties.value("value").observe(m_dataObject);
IObservableValue observeWidget = ViewerProperties.singleSelection().observe(m_comboViewer);

我知道我一次使用组合,另一次使用ComboViewer,但如果需要,我可以从查看器中获取组合并以另一种方式绑定。。。

此外,我可以将两者混合使用吗?例如,使用observeValueViewerProperties

IObservableValue observeValue = PojoObservables.observeValue(m_dataObject, "value");
IObservableValue observeWidget = ViewerProperties.singleSelection().observe(m_comboViewer);

我正在和JFace的观众(尤其是ComboViewer)一起玩一玩;数据绑定,发现如果我使用

SWTObservables.observeSelection(comboViewer.getCombo());

那么数据绑定工作不正常。

但是,如果我使用

ViewersObservables.observeSingleSelection(comboViewer);

然后一切都按预期进行。

也许这对我的情况来说是一个特殊的情况,所以为了更好地概述它,我将在下面的段落中描述我的设置。

我有名为selectedEntityentities的字段的modelObject,并将该ComboViewer绑定到modelObject

  • 我想显示模型对象中的所有"实体",如果我将任何实体添加到modelObject.entities集合中,那么我希望该实体自动添加到组合中
  • 如果用户在组合框中选择了某个项目,我想自动设置modelObject.selectedEntity
  • 如果我设置了modelObject.selectedEntity,我想自动设置组合选择

源代码位于:https://gist.github.com/3938502

自从Eclipse Mars以来,PojoObservables被弃用,取而代之的是PojoProperties,BeansObservable被弃用,而取而代之的是BeanProperties,因此应该使用哪一个的答案现在已经很明显了。

最新更新