您将必须
Listener在
Textusing 上添加一个
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(); }}


