【问题标题】:How to use JFoenix RequiredFieldValidator to enable/disable form JFXButton?如何使用 JFoenix RequiredFieldValidator 启用/禁用表单 JFXButton?
【发布时间】:2017-04-12 23:11:32
【问题描述】:

我正在使用 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();
        }
    });

}

如果您认为有更好的方法可以做到这一点,我愿意接受任何建议。

谢谢。

【问题讨论】:

    标签: java validation javafx jfoenix


    【解决方案1】:

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

    我添加的代码如下:

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

    这个答案没有像我希望的那样使用 JFoenix 的验证,但在某种程度上满足了我的需求。

    【讨论】:

      【解决方案2】:

      您可以按照最初的意愿使用 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);
          }
      });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-11-12
        • 1970-01-01
        • 2013-08-26
        • 2023-03-28
        • 2011-02-03
        • 2015-03-20
        • 1970-01-01
        相关资源
        最近更新 更多