我正在编写一个JFace对话框,我想对模型对象使用数据处理。
通过查看代码,我可以看到,有时我会发现用于构建绑定的PojoProperties
,而其他时候则使用PojoObservables
。
看着Javadoc,我可以阅读:
PojoObservables:为POJO(普通的旧java对象)创建可观察对象的工厂,这些对象符合带有getter和setter的对象的概念,但不提供更改时的属性更改事件。
PojoProperties:为POJO(普通的旧Java对象)创建属性的工厂,这些POJO符合带有getter和setter的对象的概念,但不提供更改时的属性更改事件。
同样的问题也适用于BeansObservables和BeansProperties之间存在的差异
(明显的)区别似乎是可观察的允许观察对象,属性允许观察属性,但由于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
,但如果需要,我可以从查看器中获取组合并以另一种方式绑定。。。
此外,我可以将两者混合使用吗?例如,使用observeValue
和ViewerProperties
?
IObservableValue observeValue = PojoObservables.observeValue(m_dataObject, "value");
IObservableValue observeWidget = ViewerProperties.singleSelection().observe(m_comboViewer);
我正在和JFace的观众(尤其是ComboViewer)一起玩一玩;数据绑定,发现如果我使用
SWTObservables.observeSelection(comboViewer.getCombo());
那么数据绑定工作不正常。
但是,如果我使用
ViewersObservables.observeSingleSelection(comboViewer);
然后一切都按预期进行。
也许这对我的情况来说是一个特殊的情况,所以为了更好地概述它,我将在下面的段落中描述我的设置。
我有名为selectedEntity
和entities
的字段的modelObject
,并将该ComboViewer
绑定到modelObject
。
- 我想显示模型对象中的所有"实体",如果我将任何实体添加到
modelObject.entities
集合中,那么我希望该实体自动添加到组合中 - 如果用户在组合框中选择了某个项目,我想自动设置
modelObject.selectedEntity
- 如果我设置了
modelObject.selectedEntity
,我想自动设置组合选择
源代码位于:https://gist.github.com/3938502
自从Eclipse Mars以来,PojoObservables被弃用,取而代之的是PojoProperties,BeansObservable被弃用,而取而代之的是BeanProperties,因此应该使用哪一个的答案现在已经很明显了。