如何将掩码设置为SWT文本以仅允许十进制

Jos*_*lio 3 java swt text

我想要的是用户只能在文本上输入十进制数字,我不希望它允许文本输入为:

  1. 你好
  2. ABC.34
  3. 34.HEY
  4. 32.3333.123

我一直在尝试使用VerifyListener,但它只给了我插入的文本部分,所以我最终得到了我想要插入的文本和插入前的文本,尝试结合文本,但我遇到了问题当你删除一个键(退格键),我最终得到一个像234 [BACKSPACE] 455的字符串.

有没有办法在Text上设置Mask或成功将VerifyEvent与当前文本组合以获得"新文本",然后再将其设置为Text?

Baz*_*Baz 10

你将不得不增加一个ListenerText使用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)