Несколько методов, позволяющих разрешить только числа в текстовом поле JavaFX

В JavaFX TextField — это часто используемый элемент управления пользовательского интерфейса для приема пользовательского ввода. В некоторых сценариях вам может потребоваться ограничить ввод только числовыми значениями. В этом сообщении блога будут рассмотрены различные методы достижения этого требования, а также приведены примеры кода. Реализуя эти методы, вы можете гарантировать, что ваше приложение JavaFX принимает только числа в компоненте TextField.

Метод 1: использование числового фильтра
Один простой подход — использовать TextFormatter с фильтром регулярных выражений, чтобы разрешить только числовой ввод. Вот пример:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.TextField;
import javafx.scene.control.TextFormatter;
import javafx.stage.Stage;
public class NumericTextFieldExample extends Application {
    @Override
    public void start(Stage primaryStage) {
        TextField textField = new TextField();
        textField.setTextFormatter(new TextFormatter<>(change -> {
            if (change.getControlNewText().matches("\\d*")) {
                return change;
            }
            return null;
        }));
        primaryStage.setScene(new Scene(textField, 200, 50));
        primaryStage.setTitle("Numeric TextField Example");
        primaryStage.show();
    }
    public static void main(String[] args) {
        launch(args);
    }
}

Метод 2: использование обработчика KeyEvent
Другой подход заключается в обработке событий клавиш и разрешении ввода только числовых ключей. Вот пример:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.TextField;
import javafx.stage.Stage;
public class NumericTextFieldExample extends Application {
    @Override
    public void start(Stage primaryStage) {
        TextField textField = new TextField();
        textField.setOnKeyTyped(event -> {
            String character = event.getCharacter();
            if (!character.matches("[0-9]")) {
                event.consume();
            }
        });
        primaryStage.setScene(new Scene(textField, 200, 50));
        primaryStage.setTitle("Numeric TextField Example");
        primaryStage.show();
    }
    public static void main(String[] args) {
        launch(args);
    }
}

Метод 3: использование прослушивателя TextProperty
Вы также можете использовать прослушиватель текстового свойства TextField для проверки и изменения входных данных. Вот пример:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.TextField;
import javafx.stage.Stage;
public class NumericTextFieldExample extends Application {
    @Override
    public void start(Stage primaryStage) {
        TextField textField = new TextField();
        textField.textProperty().addListener((observable, oldValue, newValue) -> {
            if (!newValue.matches("\\d*")) {
                textField.setText(newValue.replaceAll("[^\\d]", ""));
            }
        });
        primaryStage.setScene(new Scene(textField, 200, 50));
        primaryStage.setTitle("Numeric TextField Example");
        primaryStage.show();
    }
    public static void main(String[] args) {
        launch(args);
    }
}

В этой статье мы рассмотрели три различных метода, позволяющих разрешить только числовой ввод в текстовое поле JavaFX. Используя числовой фильтр, обработчик KeyEvent или прослушиватель TextProperty, вы можете применить ограничение на ввод пользователя. Эти методы обеспечивают гибкость в реализации желаемого поведения в зависимости от конкретных требований вашего приложения.