我需要将输入限制为TextField为整数.有什么建议?
我有一个带有几个UI元素的自定义对话框。一些TextField用于数字输入。当按下逃逸键并且焦点位于任何数字文本字段上时,此对话框不会关闭。当焦点位于没有此自定义TextFormatter的其他TextField上时,该对话框可以正常关闭。
这是简化的代码:
package application;
import java.text.DecimalFormat;
import java.text.ParsePosition;
import javafx.application.Application;
import javafx.application.Platform;
import javafx.scene.control.ButtonType;
import javafx.scene.control.Dialog;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.control.TextFormatter;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class Main extends Application {
@Override
public void start(Stage primaryStage) {
try {
TextField name = new TextField();
HBox hb1 = new HBox();
hb1.getChildren().addAll(new Label("Name: "), name);
TextField id = new TextField();
id.setTextFormatter(getNumberFormatter()); // numbers only
HBox hb2 = new HBox();
hb2.getChildren().addAll(new Label("ID: "), id);
VBox vbox = new …Run Code Online (Sandbox Code Playgroud) 我试图通过使用JavaFX 8的TextFormatter为整数创建一个数字TextField.
使用UnaryOperator解决方案:
UnaryOperator<Change> integerFilter = change -> {
String input = change.getText();
if (input.matches("[0-9]*")) {
return change;
}
return null;
};
myNumericField.setTextFormatter(new TextFormatter<String>(integerFilter));
Run Code Online (Sandbox Code Playgroud)
使用IntegerStringConverter的解决方案:
myNumericField.setTextFormatter(new TextFormatter<>(new IntegerStringConverter()));
Run Code Online (Sandbox Code Playgroud)
两种解决方案都有自己的问题.使用UnaryOperator,我只能输入0到9之间的数字,但我还需要输入负值,如"-512",其中只允许在第一个位置使用符号.此外,我不希望像"00016"这样的数字仍然可能.
IntegerStringConverter方法效果更好:不接受每个无效的数字,如"-16-123",像"0123"这样的数字转换为"123".但转换仅在文本提交时(通过按Enter键)或TextField失去焦点时发生.
有没有办法在每次更新TextField的值时使用IntegerStringConverter强制转换第二个方法?
嗨,我试图从文本字段中读取数字,显示价格,例如£3.00,并将价格的值转换为双倍.有办法吗?
Double value;
value = Double.parseDouble(textField.getText());
Run Code Online (Sandbox Code Playgroud)
但由于英镑符号,它不会让我这样做.有没有办法剥去英镑符号然后读取数字.
谢谢