如何在 JavaFX 的 TextInputDialog 中执行输入检查?
How to perform input checks in TextInputDialog in JavaFX?
我有下面的代码。它描述了一个简单的 TextInputDialog(其中包含一个文本字段和确定按钮)。
如何执行输入检查? (例如验证输入是 numeric/not-empty 等等)。
在底线,我希望在输入错误时禁用 OK 按钮,或者如果我按 OK 然后输入错误则什么也不会发生。
TextInputDialog tid = new TextInputDialog("250");
tid.setTitle("Text Input Dialog");
tid.setHeaderText("Input check example");
tid.setContentText("Please enter a number below 100:");
Optional<String> result = tid.showAndWait();
result.ifPresent(name -> System.out.println("Your name: " + name));
在 "ifPresent" 部分,我可以检查输入,但它会在对话框关闭后进行。
我该如何解决?
您可以在 TextInputDialog
上使用 getEditor()
来获取基础 TextField
并在对话框的 DialogPane
上使用 lookupButton(ButtonType)
来获取 OK- Button
。然后你可以使用绑定来实现你想要的行为:
Button okButton = (Button) tid.getDialogPane().lookupButton(ButtonType.OK);
TextField inputField = tid.getEditor();
BooleanBinding isInvalid = Bindings.createBooleanBinding(() -> isInvalid(inputField.getText()), inputField.textProperty());
okButton.disableProperty().bind(isInvalid);
现在您可以创建一个方法 isInvalid()
来验证您的输入以及 returns true
(如果按钮应该被禁用)或 false
(如果它应该启用)。
当然,您可以反过来创建一个 isValid
方法,而不是在绑定上使用 not()
方法。
我有下面的代码。它描述了一个简单的 TextInputDialog(其中包含一个文本字段和确定按钮)。 如何执行输入检查? (例如验证输入是 numeric/not-empty 等等)。 在底线,我希望在输入错误时禁用 OK 按钮,或者如果我按 OK 然后输入错误则什么也不会发生。
TextInputDialog tid = new TextInputDialog("250");
tid.setTitle("Text Input Dialog");
tid.setHeaderText("Input check example");
tid.setContentText("Please enter a number below 100:");
Optional<String> result = tid.showAndWait();
result.ifPresent(name -> System.out.println("Your name: " + name));
在 "ifPresent" 部分,我可以检查输入,但它会在对话框关闭后进行。 我该如何解决?
您可以在 TextInputDialog
上使用 getEditor()
来获取基础 TextField
并在对话框的 DialogPane
上使用 lookupButton(ButtonType)
来获取 OK- Button
。然后你可以使用绑定来实现你想要的行为:
Button okButton = (Button) tid.getDialogPane().lookupButton(ButtonType.OK);
TextField inputField = tid.getEditor();
BooleanBinding isInvalid = Bindings.createBooleanBinding(() -> isInvalid(inputField.getText()), inputField.textProperty());
okButton.disableProperty().bind(isInvalid);
现在您可以创建一个方法 isInvalid()
来验证您的输入以及 returns true
(如果按钮应该被禁用)或 false
(如果它应该启用)。
当然,您可以反过来创建一个 isValid
方法,而不是在绑定上使用 not()
方法。