快速业务通道

了解Eclipse中的JFace数据绑定,第2部分: 绑定的基础知识 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-19
etter 可以轻松地映射为 getText() 和 setText() 方法。此外,更新侦听程序将把焦点更改适配为一般更改事件。它将检查在创建 TextObservableValue 时指定的更新策略,并将本机文本小部件事件适配为一般的 IObservableValue 事件。

清单 6. TextObservableValue 的 get/set 方法

public final Object getValue() {   ...   return doGetValue(); } public void setValue(Object value) {   Object currentValue = doGetValue();   ValueDiff diff = Diffs.createValueDiff(currentValue, value);   ...   doSetValue(value);   fireValueChange(diff); } public void doSetValue(final Object value) {   try {   updating = true;   bufferedValue = (String) value;   text.setText(value == null ? "" : value.toString()); //$NON-NLS-1$   } finally {   updating = false;   } } public Object doGetValue() {   return text.getText(); } private Listener updateListener = new Listener() {   public void handleEvent(Event event) {   if (!updating) {    String oldValue = bufferedValue;    String newValue = text.getText();    // If we are updating on \    focus lost then when we fire the change    // event change the buffered value    if (updatePolicy == SWT.FocusOut) {    bufferedValue = text.getText();    if (!newValue.equals(oldValue)) {     fireValueChange\     (Diffs.createValueDiff(oldValue,      newValue));    }    } else {    fireValueChange\    (Diffs.createValueDiff(oldValue, text      .getText()));    }   }   } };

JFace 数据绑定还支持适配拥有 JavaBean 属性的标准对象,例如 Person bean。BeanObservableFactory 使用了 JavaBeanObservable 对象来适配特定属性,例如示例中的 first。

在修改示例时添加的 ctx.bind() 方法调用将使 observable 工厂得以运行。JFace 数据绑定 API 中的代码将获取目标对象和模型对象,并且将搜索适当的 observable 适配器。一旦找到用于绑定关系每一端的 observable 适配器,就会使用 ValueBinding() 类的实例将其绑定在一起。

了解Eclipse中的JFace数据绑定,第2部分: 绑定的基础知识(9)

时间:2011-02-11 IBM Scott Delap

如何变魔术:ValueBinding

为要绑定的两个实体创建了 observable 之后,需要一个第三方来使其保持同步。这个角色由 ValueBinding 类来承担;下面显示了一段简化的代码片段。

清单 7. ValueBinding 中的代码片段

public void updateModelFromTarget() {   updateModelFromTarget\   (Diffs.createValueDiff(target.getValue(), target    .getValue())); } public void updateModelFromTarget(ValueDiff diff) {   ...   model.setValue(target.getValue());    ... }

ValueBinding 的实例将侦听对目标和模型生成的 observable 所做的更改,并使用类似清单 7 所示的方法相应地同步更改。如您所见,updateModelFromTarget() 方法使用了由 IObservableValue 接口定义的一般访问方法来从目标中检索值并将其设定到模型中。

如何变魔术:整体来看

让我们回到在清单 3 中添加到 createControls() 方法中的 ctx.bind 代码行。每种绑定方法都以目标、模型和绑定规范作为实参(第 2 部分将提供更多关于绑定规范的详细信息)。

如果目标和模型实参都不能直接实现接口,则目标和模型最终都必须适配为 IObs

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号