Текстовое поле, которое принимает только числа

Примечание: Текстовое поле, о котором я говорю ниже, — это MFXTextField, которое я получил от МатериалFX.

Я много искал, как создать текстовое поле в JavaFX, которое принимает только числа. Я нашел много видео и сообщений, но все они не работали для меня, может быть, потому, что они старые и работали только в прошлом, я действительно не знаю об этом.

Итак, у меня есть текстовое поле кредитной карты, и мне нужно, чтобы оно отказывалось от букв или чего-либо, кроме цифр. Вот мое текстовое поле:

Text Field

Вот мой код, который принимает TextFormatter для обычного TextField и отказывается для MFXTextField:

        UnaryOperator<TextFormatter.Change> integerFilter = change -> {
            String newText = change.getControlNewText();
            if (newText.matches("-?([1-9][0-9]*)?")) {
                return change;
            }
            return null;
        };

        NormalTextField.setTextFormatter(
                new TextFormatter<>(new IntegerStringConverter(), null, integerFilter));

        CheckTextField.setTextFormatter(
                new TextFormatter<>(new IntegerStringConverter(), null, integerFilter));

Исследование TextFormatter.

Sedrick 23.04.2022 00:02
stackoverflow.com/questions/40472668/…
Sedrick 23.04.2022 00:03

Отвечает ли это на ваш вопрос? Каков рекомендуемый способ создания числового TextField в JavaFX? имеет обновленный ответ с форматированием текста

Giovanni Contreras 23.04.2022 02:20

Я только что понял, что, возможно, большинство решений работали бы с обычным текстовым полем, но я использую текстовое поле другого типа. Я отредактировал сообщение, чтобы объяснить это.

CS Student 23.04.2022 13:04
минимальный воспроизводимый пример демонстрирует не/работает с материалом/нормальным текстовым полем
kleopatra 23.04.2022 14:08

@kleopatra отредактирована.

CS Student 23.04.2022 14:52

пожалуйста, прочитайте указанную страницу справки и действуйте соответственно - и придерживайтесь соглашений об именах Java при публичном показе кода Java

kleopatra 23.04.2022 14:53
3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
1
7
45
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема решена. Все, что мне нужно было сделать, это заменить setTextFormatter на delegateSetTextFormatter, и вот новый код:

        UnaryOperator<TextFormatter.Change> integerFilter = change -> {
            String newText = change.getControlNewText();
            if (newText.matches("-?([1-9][0-9]*)?")) {
                return change;
            }
            return null;
        };

        MFXTextField.delegateSetTextFormatter(
                new TextFormatter<Integer>(new IntegerStringConverter(), null, integerFilter));

Другие вопросы по теме