我希望用户只能写数字和空格。
我怎样才能在SWT中做到这一点?
答案 0 :(得分:6)
使用VerifyListener并根据用户输入拒绝字符。
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.VerifyEvent;
import org.eclipse.swt.events.VerifyListener;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
public class Test {
public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display);
final Text text = new Text(shell, SWT.BORDER);
text.addVerifyListener(new VerifyListener() {
@Override
public void verifyText(VerifyEvent e) {
// allows cut (CTRL + x)
if (e.text.isEmpty()) {
e.doit = true;
} else if (e.keyCode == SWT.ARROW_LEFT ||
e.keyCode == SWT.ARROW_RIGHT ||
e.keyCode == SWT.BS ||
e.keyCode == SWT.DEL ||
e.keyCode == SWT.CTRL ||
e.keyCode == SWT.SHIFT) {
e.doit = true;
} else {
boolean allow = false;
for (int i = 0; i < e.text.length(); i++) {
char c = e.text.charAt(i);
allow = Character.isDigit(c) || Character.isWhitespace(c);
if ( ! allow ) {
break;
}
}
e.doit = allow;
}
}
});
text.setSize(200, 20);
shell.pack();
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
}
答案 1 :(得分:2)
在文本控件上设置VerifyListener
,检查插入的文本是否只包含数字。
这比使用密钥代码的解决方案更好。由于它适用于输入,因此它不会阻止粘贴和删除等操作。
示例:
text.addVerifyListener(new VerifyListener() {
@Override
public void verifyText(VerifyEvent e) {
for (int i = 0; i < e.text.length(); i++) {
if (!Character.isDigit(e.text.charAt(i))) {
e.doit = false;
return;
}
}
}
});
答案 2 :(得分:0)
在Swing中你有一个JFormattedTextField就可以做到这一点。但我不认为SWT中有类似的东西。您应该能够进行一些更改以包含JFormattedTextField,如果这真的是您需要的。另一个选择是在输入后验证用户的输入。