JavaFX输入验证文本字段

我正在使用JavaFX和Scene Builder,并且有一个带有文本字段的表单。这些文本字段中的三个从字符串解析为双精度。

我希望它们是学校成绩,因此只能将其设置为1.0到6.0之间。不应允许用户写“ 2.34.4”之类的内容,但可以写“ 5.5”或“ 2.9”之类的内容。

public void validate(KeyEvent event) {

String content = event.getCharacter();

if ("123456.".contains(content)) {

// No numbers smaller than 1.0 or bigger than 6.0 - How?

} else {

event.consume();

}

}

如何测试用户输入的值是否正确?

我已经在Stackoverflow和Google上进行了搜索,但没有找到令人满意的解决方案。

回答:

textField.focusedProperty().addListener((arg0, oldValue, newValue) -> {

if (!newValue) { //when focus lost

if(!textField.getText().matches("[1-5]\\.[0-9]|6\\.0")){

//when it not matches the pattern (1.0 - 6.0)

//set the textField empty

textField.setText("");

}

}

});

您还可以将模式更改为,[1-5](\.[0-9]){0,1}|6(.0){0,1}然后1,2,3,4,5,6也可以(不仅是1.0,2.0,...

这是一个小型测试应用程序,允许使用值1(.00)至6(.00):

public class JavaFxSample extends Application {

@Override

public void start(Stage primaryStage) {

primaryStage.setTitle("Enter number and hit the button");

GridPane grid = new GridPane();

grid.setAlignment(Pos.CENTER);

Label label1To6 = new Label("1.0-6.0:");

grid.add(label1To6, 0, 1);

TextField textField1To6 = new TextField();

textField1To6.focusedProperty().addListener((arg0, oldValue, newValue) -> {

if (!newValue) { // when focus lost

if (!textField1To6.getText().matches("[1-5](\\.[0-9]{1,2}){0,1}|6(\\.0{1,2}){0,1}")) {

// when it not matches the pattern (1.0 - 6.0)

// set the textField empty

textField1To6.setText("");

}

}

});

grid.add(textField1To6, 1, 1);

grid.add(new Button("Hit me!"), 2, 1);

Scene scene = new Scene(grid, 300, 275);

primaryStage.setScene(scene);

primaryStage.show();

}

public static void main(String[] args) {

launch(args);

}

}

以上是 JavaFX输入验证文本字段 的全部内容, 来源链接: utcz.com/qa/418951.html

回到顶部