我试图将一个通用的字符白名单放在一个文本框中,其中包含一些但不是所有特殊字符。
所以基本上用户输入了一个电话号码,我想将他们可以输入的字符限制为只有电话号码(所以如果他们试图输入' 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;
}
}
};
此外,如果有更好的方法,我也很乐意听到这一点。
答案 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;
}
}
};