防止用户在SWT中输入文本字段中的字符

时间:2010-12-03 13:31:29

标签: java swt

我希望用户只能写数字和空格。

我怎样才能在SWT中做到这一点?

3 个答案:

答案 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,如果这真的是您需要的。另一个选择是在输入后验证用户的输入。