我想要的是用户只能在文本上输入十进制数字,我不希望它允许文本输入为:
我一直在尝试使用VerifyListener,但它只给了我插入的文本部分,所以我最终得到了我想要插入的文本和插入前的文本,尝试结合文本,但我遇到了问题当你删除一个键(退格键),我最终得到一个像234 [BACKSPACE] 455的字符串.
有没有办法在Text上设置Mask或成功将VerifyEvent与当前文本组合以获得"新文本",然后再将其设置为Text?
Baz*_*Baz 10
你将不得不增加一个Listener上Text使用SWT.Verify.在此范围内,Listener您可以验证输入仅包含十进制数.
以下内容仅允许在文本字段中插入小数.它会在每次更改文本中的内容时检查该值并拒绝它,如果它不是小数.这将解决您的问题,因为在VerifyListener插入新文本之前执行.新文本必须通过侦听器才能被接受.
public static void main(String[] args) {
Display display = Display.getDefault();
final Shell shell = new Shell(display);
shell.setLayout(new FillLayout());
final Text textField = new Text(shell, SWT.BORDER);
textField.addVerifyListener(new VerifyListener() {
@Override
public void verifyText(VerifyEvent e) {
Text text = (Text)e.getSource();
// get old text and create new text by using the VerifyEvent.text
final String oldS = text.getText();
String newS = oldS.substring(0, e.start) + e.text + oldS.substring(e.end);
boolean isFloat = true;
try
{
Float.parseFloat(newS);
}
catch(NumberFormatException ex)
{
isFloat = false;
}
System.out.println(newS);
if(!isFloat)
e.doit = false;
}
});
shell.pack();
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
}
Run Code Online (Sandbox Code Playgroud)