#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. Мое решение работает должным образом, если вы копируете-вставляете текст. Но я согласен, что счетчик может быть здесь более подходящим виджетом, чем текст.