как сделать так, чтобы текст не допускал ввода более ‘x’ цифр?

#textbox #numbers #swt

#текстовое поле #числа #swt

Вопрос:

Мой вопрос:

Я хочу, чтобы текстовое поле в Eclipse RCP позволяло вводить в качестве входных данных только цифры, и требование состоит в том, чтобы оно допускало только до ‘x’ (скажем, x = 5) символов.
Как я могу выполнить это в RCP?

Я пробовал код, подобный:

 txtInput.addListener(SWT.Verify, new DecimalText(
                txtInsuranceValue, 8, 1000.00));
  

где txtinput — текстовое поле. Но этот прослушиватель потерпел неудачу, когда я повторил ввод в это поле во время выполнения.

Пожалуйста, какие-либо альтернативы?

Ответ №1:

Это установит максимальное количество символов в вашем текстовом элементе управления равным пяти и позволит вводить только цифры:

     txtInput.setTextLimit(5);

    txtInput.addVerifyListener(new VerifyListener() {
        public void verifyText(VerifyEvent event) {
            // Assume we allow it
            event.doit = true;

            String text = event.text;
            char[] chars = text.toCharArray();

            //Don't allow if text contains non-digit characters
            for (int i = 0; i < chars.length; i  ) {
                if (!Character.isDigit(chars[i])) {
                    event.doit = false;
                    break;
                }
            }
        }
    });
  

РЕДАКТИРОВАТЬ: Я изменил свой ответ, чтобы разрешить пользователю также задавать текст с помощью «setText (String строка)», при этом по-прежнему запрещая нецифровые символы.

Комментарии:

1. Спасибо Sandman за ваш быстрый ответ. Предоставленный вами код работал идеально, если ввод в txtInput вводится с помощью клавиши, но он предотвращает ввод с помощью оператора присваивания значения, такого как txtInput.setText («Входные символы»); Не могли бы вы предложить мне что-нибудь еще?

2. Большое, очень большое спасибо Sandman за ваше руководство для меня. Ваши ответы хорошо помогли мне добраться до того места, где требовалось мое требование. Еще раз спасибо.

Ответ №2:

В общем, такие решения, как добавление verifyListeners / focusListeners, не являются полными и не будут работать во всех ситуациях. Например, что происходит, когда пользователь копирует некоторый текст в это текстовое поле?

Если все, что вы хотите, это получить числовые входные данные от пользователя, вам следует использовать виджет Spinner вместо текстового виджета. Вы могли бы легко установить минимальные и максимальные ограничения для счетчика.

Смотрите фрагменты для более удобного использования.

Комментарии:

1. Мое решение работает должным образом, если вы копируете-вставляете текст. Но я согласен, что счетчик может быть здесь более подходящим виджетом, чем текст.