鉴于我有一个带有验证器的javafx输入字段(示例来自JFoenix library):
JFXTextField validationField = new JFXTextField();
validationField.setPromptText("Your age");
NumberValidator validator = new NumberValidator();
validator.setMessage("Digits only!");
validationField.getValidators().add(validator);
validationField.focusedProperty().addListener((o,oldVal,newVal)->{
if(!newVal) validationField.validate();
});
我的目标是仅在文本字段上的验证返回true时启用/禁用某些按钮,但validationField.validate()
返回布尔值而不是ObservableBooleanValue。
BooleanBinding invalid = someOtherTextField.textProperty().isEmpty()
.or(!validationField.validate()); // invalid syntax
candidateButton.disableProperty().bind(invalid);
如何通过验证文本字段创建ObservableBooleanValue?
答案 0 :(得分:2)
您可以使用Bindings.createBooleanBinding
方法创建BooleanBinding
。您需要指定Callable<Boolean>
(一个返回要包含在BooleanBinding
中的值的函数),以及必须遵守的任何其他Observable
,以便在重新计算函数时重新计算他们改变了。
所以你可以做到
BooleanBinding invalid = someOtherTextField.textProperty().isEmpty()
.or(Bindings.createBooleanBinding(() -> !validationField.validate(),
validationField.textProperty()));
我不知道JFoenix(我已经看了好几次,但似乎没有任何合理的文件库 - 例如没有Javadocs - 所以就我而言,它是在生产中并不真正可用)。可能有办法直接获得绑定。