快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-19
     new BindSpec()); } private void createControls(Composite c) {    . . .    Label labelMarried = new Label(c, SWT.SHELL_TRIM);    labelMarried.setText("Married");    gridData = new GridData(GridData.FILL_HORIZONTAL);    this.chkIsMarried = new Button(c, SWT.CHECK);    this.chkIsMarried.setLayoutData(gridData);    . . . }

如您所见,可以对示例的每个构建块做出关系紧密的更改。可以很轻松地修改启用逻辑以清空模型中的第二个字段。而这只需要多加一行绑定代码就可以实现对 UI 中的附加 Spouse 字段的启用并使其保持同步。

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

时间:2011-02-11 IBM Scott Delap

引入 BindSpec

在本系列教程的第 2 部分和本教程的至此之前的内容,您已看到了所创建的 BindSpec 的实例,但却没有提供任何后续信息。有时,在绑定两个对象的属性后,还需要更多配置以实现理想的数据流的来回传送。这就需要引入 BindSpec 类。该类可用作指定更多绑定配置,并在数据同步期间提供验证和转换功能。

观察一下 BindSpec 类,就会发现它包含用于 model-to-target 和 target-to-model 转换程序的 setter 方法。每个方法都要求有一个实现 IConverter 接口的类,如清单 12 所示。

清单 12. IConverter 接口

public interface IConverter {   public Object getFromType();   public Object getToType();   public Object convert(Object fromObject); }

要允许 JFace 数据绑定来检查是否已为绑定的目标和模型指定了有效的转换程序,接口需要转换的两端的类型信息。通常,这有点像 String.class。然后 DataBindingContext.bind 方法将在绑定时把这些类型与模型和目标的类型相比较以查看一致性。惟一还需要的方法是执行实际转换。

BindSpec 上的另一个主要选件是验证程序。验证程序可以设置在目标端和模型端。调用 setValidator 将默认指向目标端。例如,这会致使来自小部件的数据在与模型同步之前就被验证。验证程序必须实现 IValidator 接口,如清单 13 所示。

清单 13. IValidator 接口

public interface IValidator {   public ValidationError isPartiallyValid(Object value);   public ValidationError isValid(Object value); }

isPartiallyValid() 方法允许在值被更改时(例如,在光标位于文本字段中并且用户正在键入信息)执行验证。相比之下,isValid() 方法却是在所有更改都已完成但尚未与模型同步时(例如,切换出文本字段)被调用的。

实现自定义转换程序

再回到示例上来,假设客户机已经要求将外观普通的 Married 复选框更改为包含 “Yes” 和 “No” 的文字的组合框,如图 7 所示。

图 7. 带有组合框而不是复选框的 UI 示例

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

时间:2011-02-11 IBM Scott Delap

但是,请不要忘记复选框是被绑定到 enableYearsMarried 属性上的,该属性属于 boolean 类型。一端的 String 和另一端的 boolean 类型不匹配。在这就非常适合放置一个转换程序。

虽然可以编写针对本教程中其余部分中展示的功能的测试,但是本示例将侧重于实现。对于测试仅做为了保持 ContactPresentationModelTest 所需的更改。但是,在开发环境中,编写测试始终是个很好的做法。

创建一个名为 BooleanToStringConverter 的新类。对于新类的 fromType,返回 Boolean.TYPE;对于新类的 toType,返回 String.class。在 convert() 方法中,将对象指定为 Boolean,并且如果为 true 则返回 Yes;如果为 f

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