Format de numéro de champ de texte JavaFX
La classe TextFormatter
est utilisée pour créer des champs avec certains formats. Il peut également être utilisé pour créer un champ de texte numérique dans JavaFX.
Ce tutoriel montre comment créer un champ de texte numérique dans JavaFX.
Format de numéro de champ de texte JavaFX
JavaFX.scene.control.TextFormatter<V>
est utilisé pour créer des champs avec certains formats. Le Formatter
décrit un texte de format TextInputControl
avec deux structures différentes.
L’un est un filtre getFilter()
pour modifier l’entrée de l’utilisateur, et l’autre est un convertisseur de valeur getValueConverter()
utilisé pour fournir un format spécial qui représente une valeur de type V
. Le TextFormatter
peut être créé uniquement avec le filtre et le convertisseur de valeur.
La syntaxe de TextFormatter
est la suivante :
TextFormatter<Integer> Text_Formatter = new TextFormatter<Integer>(String_Converter, 0, Integer_Filter);
Numeric_Field.setTextFormatter(Text_Formatter);
Le TextFormatter
peut être un entier ou tout autre type, et la méthode setTextFormatter
est utilisée pour appliquer le TextFormatter
au champ.
Essayons un exemple pour créer un champ de texte numérique :
package delftstack;
import java.util.function.UnaryOperator;
import javafx.application.Application;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;
import javafx.scene.control.TextFormatter;
import javafx.scene.control.TextFormatter.Change;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import javafx.util.StringConverter;
import javafx.util.converter.IntegerStringConverter;
public class Numeric_TextField extends Application {
@Override
public void start(Stage Demo_Stage) {
TextField Numeric_Field = new TextField();
UnaryOperator<Change> Integer_Filter = change -> {
String Demo_Text = change.getControlNewText();
if (Demo_Text.matches("-?([1-9][0-9]*)?")) {
return change;
} else if ("-".equals(change.getText())) {
if (change.getControlText().startsWith("-")) {
change.setText("");
change.setRange(0, 1);
change.setCaretPosition(change.getCaretPosition() - 2);
change.setAnchor(change.getAnchor() - 2);
return change;
} else {
change.setRange(0, 0);
return change;
}
}
return null;
};
StringConverter<Integer> String_Converter = new IntegerStringConverter() {
@Override
public Integer fromString(String s) {
if (s.isEmpty())
return 0;
return super.fromString(s);
}
};
TextFormatter<Integer> Text_Formatter =
new TextFormatter<Integer>(String_Converter, 0, Integer_Filter);
Numeric_Field.setTextFormatter(Text_Formatter);
// demo listener:
Text_Formatter.valueProperty().addListener(
(obs, oldValue, newValue) -> System.out.println(newValue));
VBox VBox_Root = new VBox(5, Numeric_Field, new Button("Click Here"));
VBox_Root.setAlignment(Pos.CENTER);
Scene scene = new Scene(VBox_Root, 300, 120);
Demo_Stage.setScene(scene);
Demo_Stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
Le code ci-dessus utilise un UnaryOperator
pour le filtre et StringConverter
comme valeur. Le code utilise TextFormatter
pour créer un champ de texte qui ne prendra que les valeurs entières.
Voir la sortie :
Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.
LinkedIn Facebook