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

 
前一页第 11 页,共 19 页后一页


对本教程的评价

帮助我们改进这些内容


实现自定义验证程序

示例中的字段此刻都只获取字符串。但是,Years Married 字段应当限定为数字。实现限定的一种方法是使用自定义验证程序。创建一个名为 YearsMarriedValidator 的类并将清单 15 中的代码粘贴到其中。



清单 15. 自定义验证程序
                    
public class YearsMarriedValidator implements IValidator {

    public ValidationError isPartiallyValid(Object value) {
        try {
            Integer.valueOf((String) value);
            return null;
        } catch (NumberFormatException nfe) {
            return new ValidationError(ValidationError.ERROR, 
            "Not A Number");
        } 
    }

    public ValidationError isValid(Object value) {
        if ("5".equals(value)) {
            return ValidationError.error("5 Is Not Allowed");
        } else {
            return null;
        }
    }
}

这段代码将同时实现 isPartiallyValid()isValid() 方法。对于 isPartiallyValid() 方法,将尝试把输入的字符串转换为一个整数。如果系统抛出了 NumberFormatException,则知道尝试失败。结果将返回 ValidationError。对于本示例,如果输入数字 5,则 isValid() 方法将返回一个 ValidationError。最后需要做的是将验证程序包含到 yearsMarriedTxt 字段的 BindSpec 中,如清单 16 所示。



清单 16. 绑定验证程序
                    
ctx.bind(validationErrorLabel, binding.getValidationError(),
        new BindSpec(new ValidationErrorToStringConverter(),
                new ReadOnlyConverter(String.class,
                        ValidationError.class), null, null));

此时,打开修改后的示例,然后在组合框中选中 Yes 启用 Years Married 字段。尝试在 Years Married 字段中输入字符 abc。不会有任何变化,因为验证程序的部分验证检查将阻止输入数字。现在输入数字 1,然后尝试删除该数字。有趣的是,您会发现不能删除。因为并未编码让验证程序允许 null 或空字符串,因此不允许删除数字,因为这样做会导致产生无效的值。修改部分验证方法以处理这些问题,然后返回应用程序。

为了更方便地浏览 YearsMarriedValidator 上的 isValid() 方法,请使用清单 17 中的代码创建一个标签小部件并将其绑定到属性上。



清单 17. 添加显示 Years Married 值的标签
                    
Label yvLabel = new Label(c, SWT.NONE);
yvLabel.setText("YM Value:");
this.ymValLabel = new Label(c, SWT.BORDER);
gridData = new GridData(GridData.FILL_HORIZONTAL);
this.ymValLabel.setLayoutData(gridData);

...

ctx.bind(ymValLabel, new Property(presentationModel.getContact(),
"yearsMarried"), new BindSpec());

现在,当 Contact 对象中的属性被 JFace 数据绑定触发时,可以真实地看到对其所做的更改。启用 Years Married 字段,然后再次键入 abc。将会注意到标签中未显示任何内容,因为无效的更改不会被同步。接下来,输入数字 1。该数字将会与 Contact 对象同步。由于标签还被绑定到 Contact 对象上,因此标签也更改为 1。输入数字 5,然后切换出该字段。注意:虽然该值仍保留在文本小部件中,但是该值不会显示在标签中。这是因为验证程序阻止了同步。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值