如何使用JFoenix RequiredFieldValidator启用/禁用表单JFXButton?

时间:2017-04-12 23:11:33

标签: java validation javafx jfoenix

我正在使用JFoenix创建登录表单,我的表单有一个文本字段和一个密码字段as you see validation is okey :)

我正在尝试做的是根据两个字段的验证自动禁用/启用“连接器”按钮

在我的代码下面

RequiredFieldValidator requiredFieldValidator ;
private void setupValidation() {
    requiredFieldValidator = new RequiredFieldValidator();
    requiredFieldValidator.setIcon(new ImageView(getClass().getResource("/icons/errors/invalid.png").toString()));
    requiredFieldValidator.setMessage("champs obligatoire");

    userName.getValidators().add(requiredFieldValidator);
    userName.focusedProperty().addListener((ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) -> {
        if (!newValue) {
            userName.validate();
        }
    });

    requiredFieldValidator = new RequiredFieldValidator();
    requiredFieldValidator.setIcon(new ImageView(getClass().getResource("/icons/errors/invalid.png").toString()));
    requiredFieldValidator.setMessage("champs obligatoire");
    password.getValidators().add(requiredFieldValidator);
    password.focusedProperty().addListener((ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) -> {
        if (!newValue) {
            password.validate();
        }
    });
    requiredFieldValidator = new RequiredFieldValidator();
    requiredFieldValidator.setIcon(new ImageView(getClass().getResource("/icons/errors/invalid.png").toString()));
    requiredFieldValidator.setMessage("champs obligatoire");
    passwordConfirm.getValidators().add(requiredFieldValidator);
    passwordConfirm.focusedProperty().addListener((ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) -> {
        if (!newValue) {
            passwordConfirm.validate();
        }
    });

}

如果您认为有更好的方法,我会接受任何建议。

感谢。

2 个答案:

答案 0 :(得分:1)

在javafx中,我们可以在控件属性之间轻松绑定为可见性或无能力。 我所做的就是将连接按钮的disableProperty绑定到所有必填字段的textProperty,并且使用逻辑表达式非常简单。

我添加的代码如下:

    connect.disableProperty().bind((
            passwordConfirm.textProperty().isNotEmpty().and(
            password.textProperty().isNotEmpty()).and(
            userName.textProperty().isNotEmpty())
            ).not());

这个答案并没有像我希望的那样使用JFoenix的验证,而是满足了我的需求。

答案 1 :(得分:1)

您可以根据自己的意愿使用JFoenix验证。当你调用validate()方法时,你实际上可以获得一个布尔值,每次聚焦属性改变时,取决于验证,它将是真/假。那就是:

userName.focusedProperty().addListener((ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) -> {
    if (!newValue) {
        if(userName.validate()) userName.setDisable(false);
        else userName.setDisable(true);
    }
});