Как использовать JFoenix RequiredFieldValidator для включения/отключения формы JFXButton?

Я использую JFoenix для создания формы входа, в моей форме есть текстовое поле и поле пароля как вы видите, проверка прошла успешно :)

Что я пытаюсь сделать, так это автоматически отключить/включить кнопку «Коннектор» в соответствии с проверкой двух полей.

ниже моего кода

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();
        }
    });

}

Если вы считаете, что есть лучший способ сделать это, я открыт для любых предложений.

Спасибо.


person Mohammed Housseyn Taleb    schedule 12.04.2017    source источник


Ответы (2)


В javafx мы можем легко связать свойства элементов управления, такие как видимость или невозможность. Все, что я сделал, это привязал disableProperty моей кнопки подключения к textProperty всех моих обязательных полей, и это довольно просто, используя логические выражения.

мой добавленный код ниже:

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

этот ответ не использует проверку JFoenix, как я хотел, но в некоторой степени удовлетворяет мои потребности.

person Mohammed Housseyn Taleb    schedule 13.04.2017

Вы можете использовать валидацию 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);
    }
});
person Daniel Ocampo    schedule 17.05.2018