JavaFX 文本字段数字格式
![JavaFX 文本字段数字格式](/img/Java/feature-image---javafx-text-field-number-format.webp)
TextFormatter
类用于创建具有特定格式的字段。它还可用于在 JavaFX 中创建数字文本字段。
本教程演示如何在 JavaFX 中创建数字文本字段。
JavaFX 文本字段数字格式
JavaFX.scene.control.TextFormatter<V>
用于创建具有特定格式的字段。Formatter
描述了具有两种不同结构的格式 TextInputControl
文本。
一个是用于修改用户输入的过滤器 getFilter()
,另一个是用于提供表示 V
类型值的特殊格式的值转换器 getValueConverter()
。TextFormatter
可以仅使用过滤器和值转换器创建。
TextFormatter
的语法是:
TextFormatter<Integer> Text_Formatter = new TextFormatter<Integer>(String_Converter, 0, Integer_Filter);
Numeric_Field.setTextFormatter(Text_Formatter);
TextFormatter
可以是整数或任何其他类型,setTextFormatter
方法用于将 TextFormatter
应用于字段。
让我们尝试一个创建数字文本字段的示例:
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);
}
}
上面的代码使用一个 UnaryOperator
作为过滤器和 StringConverter
作为一个值。该代码使用 TextFormatter
创建一个仅采用整数值的文本字段。
见输出:
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