如何在 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() 方法。