首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >swt/jface : PojoProperties对PojoObservable

swt/jface : PojoProperties对PojoObservable
EN

Stack Overflow用户
提问于 2012-10-12 09:00:35
回答 2查看 2.2K关注 0票数 5

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

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

看看我能读到的Javadoc:

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

PojoProperties:用于为POJO(普通的旧Java对象)创建属性的工厂,它符合带有getter和setter的对象的思想,但在更改时不提供属性更改事件。

同样的问题也适用于BeansObservables和BeansProperties之间存在的差异。

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

下面是代码摘录:

POJO:

代码语言:javascript
运行
复制
public class DataObject {
  private String m_value;
  public String getValue() {
    return m_value;
  }
  public void setValue(String i_value) {
    m_value = i_value;
  }
}

对话框(相关部分):

代码语言:javascript
运行
复制
@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);

}

绑定(相关部分):

代码语言:javascript
运行
复制
    // 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

代码语言:javascript
运行
复制
    IObservableValue observeValue = PojoObservables.observeValue(m_dataObject, "value");
    IObservableValue observeWidget = ViewerProperties.singleSelection().observe(m_comboViewer);
EN

回答 2

Stack Overflow用户

发布于 2012-10-23 12:33:38

我正在与JFace查看器(特别是ComboViewer)玩一些&绑定,并发现如果我使用

代码语言:javascript
运行
复制
SWTObservables.observeSelection(comboViewer.getCombo());

那么,数据库处理就不能正常工作了。

但是,如果我使用

代码语言:javascript
运行
复制
ViewersObservables.observeSingleSelection(comboViewer);

然后一切都如期而至。

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

我有modelObject,字段名为selectedEntityentities,并将这个ComboViewer绑定到modelObject

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

源代码可在:https://gist.github.com/3938502上找到

票数 2
EN

Stack Overflow用户

发布于 2016-01-18 10:26:15

由于Eclipse,PojoObservables被弃用于PojoProperties,而BeansObservables被弃用于BeanProperties,所以应该使用的答案现在变得很明显了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12855573

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档