如何使用 JFoenix RequiredFieldValidator 来 enable/disable 形成 JFXButton?
How to use JFoenix RequiredFieldValidator to enable/disable form JFXButton?
我正在使用 JFoenix 创建一个登录表单,我的表单有一个文本字段和一个密码字段
我想做的是根据两个字段的验证disable/enable自动"Connecter"按钮
在我的代码下方
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();
}
});
}
如果您认为有更好的方法,我愿意接受任何建议。
谢谢。
在 javafx 中,我们可以轻松地在控件属性之间绑定可见性或不可见性。
我所做的只是将我的连接按钮的 disableProperty
绑定到我所有必填字段的 textProperty
,并且使用逻辑表达式非常简单。
我添加的代码如下:
connect.disableProperty().bind((
passwordConfirm.textProperty().isNotEmpty().and(
password.textProperty().isNotEmpty()).and(
userName.textProperty().isNotEmpty())
).not());
这个答案并没有像我希望的那样使用JFoenix的验证,但是在某种程度上满足了我的需求。
您可以按照最初的意愿使用 JFoenix 验证。当您调用 validate()
方法时,您实际上可以获得一个布尔值,每次焦点 属性 发生变化时,该布尔值将根据验证为 true/false。即:
userName.focusedProperty().addListener((ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) -> {
if (!newValue) {
if(userName.validate()) userName.setDisable(false);
else userName.setDisable(true);
}
});
我正在使用 JFoenix 创建一个登录表单,我的表单有一个文本字段和一个密码字段
我想做的是根据两个字段的验证disable/enable自动"Connecter"按钮
在我的代码下方
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();
}
});
}
如果您认为有更好的方法,我愿意接受任何建议。
谢谢。
在 javafx 中,我们可以轻松地在控件属性之间绑定可见性或不可见性。
我所做的只是将我的连接按钮的 disableProperty
绑定到我所有必填字段的 textProperty
,并且使用逻辑表达式非常简单。
我添加的代码如下:
connect.disableProperty().bind((
passwordConfirm.textProperty().isNotEmpty().and(
password.textProperty().isNotEmpty()).and(
userName.textProperty().isNotEmpty())
).not());
这个答案并没有像我希望的那样使用JFoenix的验证,但是在某种程度上满足了我的需求。
您可以按照最初的意愿使用 JFoenix 验证。当您调用 validate()
方法时,您实际上可以获得一个布尔值,每次焦点 属性 发生变化时,该布尔值将根据验证为 true/false。即:
userName.focusedProperty().addListener((ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) -> {
if (!newValue) {
if(userName.validate()) userName.setDisable(false);
else userName.setDisable(true);
}
});