Запретить пользователю вводить символы в текстовое поле в SWT - PullRequest
7 голосов
/ 03 декабря 2010

Я хочу, чтобы пользователь мог писать только цифры и пробелы.

Как я могу сделать это в SWT?

Ответы [ 3 ]

6 голосов
/ 03 декабря 2010

Используйте 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();
    }
}
2 голосов
/ 10 октября 2016

Установите 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;
                }
            }
        }
    });
0 голосов
/ 03 декабря 2010

В Swing у вас есть JFormattedTextField, который будет делать именно это. Но я не думаю, что в SWT есть что-то похожее. Вы должны быть в состоянии внести некоторые изменения, чтобы включить JFormattedTextField, если это действительно то, что вам нужно. Другой вариант - просто подтвердить ввод пользователя после того, как он напечатает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...