快速业务通道

了解Eclipse中的JFace数据绑定,第3部分: 使用高级功能 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-19
分: 使用高级功能(5) 时间:2011-02-11 IBM Scott Delap

接下来,需要重写受损示例的 ModifyListener 中的逻辑,使其对 Contact 对象进行操作,而不是直接对 UI 的小部件进行操作。清单 5 中显示了这个新的属性更改侦听程序。

清单 5. 在 Presentation Model 中实现业务逻辑的新属性更改侦听程序

private class EnablementPropertyChangeListener implements   PropertyChangeListener {   public void propertyChange(PropertyChangeEvent evt) {   boolean enable = false;   if ((getContact().getName() != null &&    getContact().getName().trim().length() > 0) &&    (getContact().getSpouse() != null &&    getContact().getSpouse().trim().length() > 0)) {    enable = true;   } else {    getContact().setYearsMarried(null);   }   setEnableYearsMarried(enable);   } }

最后,ContactPresentationModel 的构造函数需要将这个新侦听程序与 Contact 的名称属性和配偶属性绑定起来,如清单 6 所示。

清单 6. 向联系人的字段中添加侦听程序

EnablementPropertyChangeListener enablementPropertyChangeListener   = new EnablementPropertyChangeListener(); this.contact.addPropertyChangeListener("name", enablementPropertyChangeListener); this.contact.addPropertyChangeListener("spouse", enablementPropertyChangeListener);

如果在 ContactPresentationModel 测试上单击鼠标右键并将它作为一个 JUnit 测试来运行,则会看到令人满意的 JUnit 成功绿栏,如图 5 所示。

图 5. 测试成功后的 JUnit 视图

以一种完全可测试的不依赖 UI 的方式重写后,现在就有了与受损代码示例相同的业务逻辑。

了解Eclipse中的JFace数据绑定,第3部分: 使用高级功能(6)

时间:2011-02-11 IBM Scott Delap

将 Presentation Model 与 UI 同步

您可能想知道哪些组件必须做 JFace 数据绑定。如您所见,Presentation Model 使代码更易于测试。但是,Presentation Model 中的数据和状态仍没有被反映到 UI 中。自己编写所有同步代码会很费事。幸运的是,可以使用 JFace 数据绑定。通过更改构造函数和 bindGUI() 方法可以轻松地重构受损示例中的 ContactForm,如清单 7 所示。

清单 7. 重构的 ContactForm

public ContactForm(Composite c, ContactPresentationModel presentationModel) {   this.contact = new Contact();   createControls(c);   createButtons(c);   bindGUI(presentationModel); } private void bindGUI(ContactPresentationModel presentationModel) {   DataBindingContext ctx = createContext();   ctx.bind(nameTxt,    new Property(presentation\    Model.getContact(), "name"),    new BindSpec());   ctx.bind(spouseTxt,    new Property(presentation\    Model.getContact(), "spouse"),    new BindSpec());   ctx.bind(yearsMarriedTxt,    new Property(presentation\    Model.getContact(), "yearsMarried"),    new BindSpec());   ctx.bind(new Property(yearsMarriedTxt, "enabled"),    new Property(presentation\    Model, "enableYearsMarried"),    new BindSpec()); }

接下来,更改示例运行程序中的 run() 方法,如清单 8 所示。

清单 8. 重构的示例运行程序

public void run() {   ...   ContactPresentation

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