Я пытаюсь выяснить, как я могу проверить во время выполнения, вводится ли число в текстовое поле, и затем я хочу выполнить Backspace, чтобы удалить его самостоятельно. Мой код @FXML public void onKeyTyped (событие KeyEvent) { if (! (event.getText (). match ("[a-z]"))) { event.consume ( ) ; } }

Я не понимаю, почему это не работает. Может быть, я не понимаю концепцию изменения чего-либо во время выполнения. Любой вклад с благодарностью!

0
ita07 12 Апр 2019 в 23:06

2 ответа

Лучший ответ

Вы можете попробовать это (только FX11)

    //check if character typed is a number
    if (event.getCharacter().matches("[0-9]"))
    {
        event.consume();

        //move caret back one step as we do not want the typed digit
        //and want the caret to remain after last entered text
        textField.backward();

        //delete the typed digit
        textField.deleteNextChar();

    }

Обратите внимание, что здесь используется event.getCharacter () вместо event.getText (). Для меня getText () всегда пуст, как в этой ссылке:

JavaFX KeyEvent.getText () возвращает пустое значение?

Кроме того, если вы хотите пойти по первоначальному пути проверки, если он не равен a-z, не забывайте также учитывать A-Z. Или преобразуйте символ в нижний регистр, прежде чем проверять совпадения в зависимости от конкретного случая.

Только FX8

if (event.getCharacter().matches("[0-9]"))
    {
        event.consume();

    }
0
13 Апр 2019 в 14:31

Я предполагаю, потому что вы проверяете a-z, когда вы должны проверять 0-9.

Редактировать: Ой, вы правы, я пропустил! Что касается времени выполнения, разве не все события выполняются?

0
Reki 12 Апр 2019 в 20:48