如何从布尔值创建可观察布尔值



鉴于我有一个javafx输入字段,上面有一个验证器(示例取自JFoenix库):

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()返回布尔值而不是可观察布尔值。

BooleanBinding invalid = someOtherTextField.textProperty().isEmpty()
.or(!validationField.validate()); // invalid syntax                                 
candidateButton.disableProperty().bind(invalid);

如何通过验证文本字段创建可观察布尔值?

您可以使用Bindings.createBooleanBinding方法创建BooleanBinding。您需要指定一个Callable<Boolean>(返回要包装在BooleanBinding中的值的函数),以及必须遵守的任何其他Observable,以便在函数更改时重新计算。

所以你可以做

BooleanBinding invalid = someOtherTextField.textProperty().isEmpty()
.or(Bindings.createBooleanBinding(() -> !validationField.validate(), 
validationField.textProperty()));

我不知道 JFoenix(我已经看过几次了,但库似乎没有任何合理的文档 - 例如没有 Javadocs - 所以就我而言,它在生产中并不真正可用)。可能有一种方法可以直接获取绑定。

最新更新