В 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, вы можете применить ограничение на ввод пользователя. Эти методы обеспечивают гибкость в реализации желаемого поведения в зависимости от конкретных требований вашего приложения.