开发您的第一个 Eclipse RCP 应用程序(10/12)

 

实现自定义转换程序

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



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

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

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

创建一个名为 BooleanToStringConverter 的新类。对于新类的 fromType,返回 Boolean.TYPE;对于新类的 toType,返回 String.class。在 convert() 方法中,将对象指定为 Boolean,并且如果为 true 则返回 Yes;如果为 false 则返回 No。现在,通过创建类 StringToBooleanConverter,创建相应的转换程序。交换转换源和转换目标的类型,并将 convert() 方法改为如果值为 Yes,则返回 true;如果值为 No 则返回 false。Java 5 自动装箱负责对象转换。

接下来,需要更改 UI。删除与复选框相关联的代码并将其替换为清单 14 中的代码。此清单还包含对 bindGUI() 方法的替换绑定方法调用。回想第 2 部分中,组合框小部件有一个选项属性可供绑定。绑定行还为 BindSpec 类使用了另一个构造函数,该类允许指定 BooleanToStringConverterStringToBooleanConverter 的使用量。



清单 14. 用组合框替换复选框
                    
gridData = new GridData(GridData.FILL_HORIZONTAL);
this.comboIsMarried = new Combo(c, SWT.BORDER);
this.comboIsMarried.setLayoutData(gridData);
this.comboIsMarried.add("Yes");
this.comboIsMarried.add("No");

. . .

ctx.bind(new Property(comboIsMarried, SWTProperties.SELECTION),  
        new Property(presentationModel, 
        	"enableYearsMarried"), 
        	new BindSpec(new BooleanToStringConverter(), 
        	new StringToBooleanConverter(), null, null));
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值