使用SWT验证将要输入文本框的字符列入白名单

时间:2014-06-06 19:10:35

标签: java eclipse widget swt

我试图将一个通用的字符白名单放在一个文本框中,其中包含一些但不是所有特殊字符。

所以基本上用户输入了一个电话号码,我想将他们可以输入的字符限制为只有电话号码(所以如果他们试图输入' a'那么什么都不会发生。)

我使用SWT验证监听器来完成我目前所拥有的功能,但使用SHIFT + __ 组合的任何特殊字符都不能解决我的问题。 #39;已经使用过了。我认为这是因为班次角色被困。

这就是我所拥有的

VerifyListener verify = new VerifyListener() {
    public void verifyText(VerifyEvent event) {
        event.doit = false;

        if (Character.isDigit(event.character) {
            || Character.isWhitespace(event.character)
            || event.keyCode == '.' 
            || event.keyCode == ','
            || event.keyCode == '#' //requires shift key
            || event.keyCode == '*' //requires shift key
            || event.keyCode == '/'
            || event.keyCode == '(' //requires shift key
            || event.keyCode == ')' //requires shift key
            || event.keyCode == '['
            || event.keyCode == ']'
            || event.keyCode == '-'
            || event.keyCode == SWT.ARROW_LEFT
            || event.keyCode == SWT.ARROW_RIGHT
            || event.keyCode == SWT.BS
            || event.keyCode == SWT.DEL
            || event.keyCode == SWT.MODIFIER_MASK) {

          event.doit = true;
        }
    }
};

此外,如果有更好的方法,我也很乐意听到这一点。

1 个答案:

答案 0 :(得分:0)

我是一个简单的解决方案,只是测试角色而不是键码。按位SWT.MODIFIER_MASK,(ctrl,alt,shift)覆盖的任何键都不会触发侦听器,因为只有在看到对文本框的预期更改时才会调用侦听器。

密钥代码与物理密钥相关联,实际上可能因操作系统而异(即Windows没有“命令”密钥)。

VerifyListener verify = new VerifyListener() {
  public void verifyText(VerifyEvent event) {
    event.doit = false;

    if (Character.isDigit(event.character) {
        || Character.isWhitespace(event.character)
        || event.character == '.' 
        || event.character == ','
        || event.character == '#'
        || event.character == '*'
        || event.character == '/'
        || event.character == '('
        || event.character == ')' 
        || event.character == '['
        || event.character == ']'
        || event.character == '-'
        || event.keyCode == SWT.ARROW_LEFT
        || event.keyCode == SWT.ARROW_RIGHT
        || event.keyCode == SWT.BS
        || event.keyCode == SWT.DEL) {

      event.doit = true;
    }
  }
};