快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-19
ervable。在本例中,这项适配工作是由 IObservableFactory 来完成的。在使用 firstText 文本小部件的情况下,则不需要任何其他信息。当指定给 bind() 方法的目标/模型对象是文本小部件时,则认定与其文本属性的默认绑定应当已完成。

在使用 Person bean 的情况下,没有可绑定到的明显的默认属性。因此,Person bean 实例必须包装在一个 Property 对象中。此对象将用自己的 first 字符串添加足够的信息以使 BeanObservableFactory 可以确定要为 Person bean 中的哪一个属性创建 observable。

符合了所有这些规范后,bind() 方法最终将为指定的目标和模型创建 IObservable 适配器。然后该适配器将创建一个 ValueBinding 的实例,该实例使得在关系的一端发生更改时能够保持值的同步。

现在整个过程已经介绍完了,接下来看一看引入这些调用方法的顺序会很有帮助。清单 8 显示了一段堆栈跟踪,从焦点在文本小部件中消失时起,到由于 JFace 数据绑定从小部件中同步值而在 Person bean 中击中断点为止。请注意各种数据绑定和各种 JavaBeans 类 —— 您不必编写这些代码。

清单 8. 数据绑定同步的堆栈跟踪

Text(Control).setTabItemFocus() line: 2958 Text(Control).forceFocus() line: 809 Text(Control).sendFocusEvent(int, boolean) line: 2290 Text(Widget).sendEvent(int) line: 1501 Text(Widget).sendEvent(int, Event, boolean) line: 1520 Text(Widget).sendEvent(Event) line: 1496 EventTable.sendEvent(Event) line: 66 TextObservableValue$1.handleEvent(Event) line: 51 TextObservableValue.access$5(TextObservableValue, ValueDiff) line: 1 TextObservableValue(AbstractObservableValue).fireValueChange(ValueDiff) line: 73 ValueBinding$2.handleValueChange(IObservableValue, ValueDiff) line: 135 ValueBinding.updateModelFromTarget(ValueDiff) line: 193 JavaBeanObservableValue.setValue(Object) line: 88 Method.invoke(Object, Object...) line: 585 DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25 NativeMethodAccessorImpl.invoke(Object, Object[]) line: 39 Person.setFirst(String) line: 17

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

时间:2011-02-11 IBM Scott Delap

图 10 是显示同步进程中各个角色之间如何关联的示意图。文本小部件和 Person bean 都被适配到 IObservableValue 接口。ValueBinding 类将侦听两端的适配器并使用这些适配器同步关系两端的更改。

图 10. observable 关系的示意图

从域对象启用更改

如果返回到 BindingExample,并查看清单 9 中的代码,将会注意到这段代码中仍有一个同步方法可以在 Person bean 中的值发生更改时更新 UI 控件。这是因为 Person Bean 在其值发生更改时不提供任何通知。通过允许 JFace 数据绑定来提供同步功能可以轻松地解决这个问题。

清单 9. 调用从 Person bean 到 UI 的同步的侦听程序

 button.addSelectionListener(new SelectionAdapter() {   public void \   widgetSelected(SelectionEvent e) {    updatePerson();    synchronizePersonToUI();   }   });   ... private void synchronizePersonToUI() {   this.firstText.setText(this.person.getFirst());   this.lastText.setText(this.person.getLast()); }

修改 com.developerworks.basic.Person 类以扩展附带的 PropertyChangeAware 类。然后修改两个 setter 方法,如下所示。

清单 10. 将 PropertyChange 支持添加到 setter 中

public voi

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号