JavaFX Textfeld Zahlenformat
Die Klasse TextFormatter
wird verwendet, um Felder mit bestimmten Formaten zu erstellen. Es kann auch verwendet werden, um ein numerisches Textfeld in JavaFX zu erstellen.
Dieses Tutorial zeigt, wie Sie ein numerisches Textfeld in JavaFX erstellen.
JavaFX Textfeld Zahlenformat
JavaFX.scene.control.TextFormatter<V>
wird verwendet, um Felder mit bestimmten Formaten zu erstellen. Der Formatter
beschreibt ein Format TextInputControl
Text mit zwei unterschiedlichen Strukturen.
Der eine ist ein Filter getFilter()
, um die Benutzereingaben zu modifizieren, und der andere ist ein Wertkonverter getValueConverter()
, der verwendet wird, um ein spezielles Format bereitzustellen, das einen Wert vom Typ V
darstellt. Der TextFormatter
kann nur mit dem Filter und dem Wertekonverter erstellt werden.
Die Syntax für TextFormatter
lautet:
TextFormatter<Integer> Text_Formatter = new TextFormatter<Integer>(String_Converter, 0, Integer_Filter);
Numeric_Field.setTextFormatter(Text_Formatter);
Der TextFormatter
kann eine Ganzzahl oder ein beliebiger anderer Typ sein, und die Methode setTextFormatter
wird verwendet, um den TextFormatter
auf das Feld anzuwenden.
Versuchen wir ein Beispiel, um ein numerisches Textfeld zu erstellen:
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);
}
}
Der obige Code verwendet einen UnaryOperator
für den Filter und StringConverter
als Wert. Der Code verwendet TextFormatter
, um ein Textfeld zu erstellen, das nur die ganzzahligen Werte akzeptiert.
Siehe Ausgabe:
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