如何在JavaFX中的TextInputDialog中执行输入检查?

如何在JavaFX中的TextInputDialog中执行输入检查?,java,javafx,dialog,javafx-8,javafx-2,Java,Javafx,Dialog,Javafx 8,Javafx 2,我有下面的代码。它描述了一个简单的TextInputDialog(包含一个文本字段和OK按钮)。 如何执行输入检查?(例如,验证输入是否为数字/不为空等等)。 在底线中,如果输入错误,我希望OK按钮将被禁用,或者如果我按下OK,那么如果输入错误,将不会发生任何事情。 TextInputDialog tid = new TextInputDialog("250"); tid.setTitle("Text Input Dialog"); tid.setHeaderText("Input check

我有下面的代码。它描述了一个简单的TextInputDialog(包含一个文本字段和OK按钮)。 如何执行输入检查?(例如,验证输入是否为数字/不为空等等)。 在底线中,如果输入错误,我希望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));
TextInputDialog tid=新建TextInputDialog(“250”);
tid.setTitle(“文本输入对话框”);
tid.setHeaderText(“输入检查示例”);
tid.setContentText(“请输入100以下的数字:”);
可选结果=tid.showAndWait();
result.ifPresent(name->System.out.println(“您的名字:“+name”);
在“ifPresent”部分,我可以检查输入,但它将在对话框关闭后进行。 我怎样才能修好它


您可以使用
TextInputDialog
上的
getEditor()
来获取对话框的
对话框窗格
上的底层
TextField
lookupButton(buttonype)
,以获取确定按钮。然后,您可以使用绑定来实现所需的行为:

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()
,该方法验证您的输入,并返回
true
(如果该按钮应被禁用),或
false
(如果应被启用)

当然,您可以通过在绑定上使用
not()
方法来改变此逻辑并创建一个
isValid
方法。

不需要使用
not()
。无论如何,您都要创建一个
BooleanBinding
,因此您只需在
Callable
中执行求反操作:
BooleanBinding isInvalid=Bindings.createBooleanBinding(()->!isValid(inputField.getText()),inputField.textProperty())