如何更改默认的 Validator Decoration controlsfx
How to change default Validator Decoration controlsfx
我在我的项目中使用 controlsfx,我试图找到更改默认验证器装饰的正确方法,因此它使用 CSS 装饰器作为默认装饰器而不是图形,但我没有访问权限。
我制作自己的装饰器并装饰一些文本字段没问题,(我定义 css class,创建装饰器并且它有效)
但是我如何更改我的代码,使其默认使用 CSS 装饰进行验证!
示例代码:
ValidationSupport support = new ValidationSupport();
public void isMax(TextField tf, Boolean b){
Validator<String> validator = (control, value) -> {
boolean condition =
value != null
? !value
.matches(
"[\x00-\x20]*[+-]?(((((\p{Digit}+)(\.)?((\p{Digit}+)?)([eE][+-]?(\p{Digit}+))?)|(\.((\p{Digit}+))([eE][+-]?(\p{Digit}+))?)|(((0[xX](\p{XDigit}+)(\.)?)|(0[xX](\p{XDigit}+)?(\.)(\p{XDigit}+)))[pP][+-]?(\p{Digit}+)))[fFdD]?))[\x00-\x20]*" )
: value == null;
return ValidationResult.fromMessageIf(control,"not a number" ,Severity.ERROR , condition);
};
support.registerValidator( tf, b, validator );
}
所以要更改什么以便我的验证使用 CSS 样式而不是图形样式。
上面的代码有效,并提供了文本字段的图形验证,但是以下代码不起作用:
public class MyValid extends StyleClassValidationDecoration {
ValidationSupport support = new ValidationSupport();
public void isMax(TextField tf, Boolean b){
// Decorator.addDecoration(tf,new StyleClassDecoration("warning"));
support.setValidationDecorator(new StyleClassValidationDecoration());
Validator<String> validator = (control, value) -> {
boolean condition =
value != null
? !value
.matches(
"[\x00-\x20]*[+-]?(((((\p{Digit}+)(\.)?((\p{Digit}+)?)([eE][+-]?(\p{Digit}+))?)|(\.((\p{Digit}+))([eE][+-]?(\p{Digit}+))?)|(((0[xX](\p{XDigit}+)(\.)?)|(0[xX](\p{XDigit}+)?(\.)(\p{XDigit}+)))[pP][+-]?(\p{Digit}+)))[fFdD]?))[\x00-\x20]*" )
: value == null;
return ValidationResult.fromMessageIf(control,"not a number" ,Severity.ERROR , condition);
};
support.registerValidator( tf, b, validator );
}
问题是我认为我不知道将样式验证指向对应的 css classes 或者问题出在 returns ValidationResult.
例如这行代码:
Decorator.addDecoration(tf,new StyleClassDecoration("warning"));
装饰字段,并作为样式资源在我的默认 .css 文件中使用 "warning" class。
我如何为 StyleClassValidationDecoration 执行此操作?
重做以展示如何使用 StyleClassValidtionDecoration。
在 ControlsFX 中,如果使用 CSS - 您可以简单地提供 StyleClassValidationDecoration 您希望使用的 CSS 类。
ValidationSupport validator = new ValidationSupport();
validator.setValidationDecorator(new StyleClassValidationDecoration("myErrorClass", "myWarningClass"));
validator.registerValidator(fieldToValidate, false, this::myValidationForField);
我在我的项目中使用 controlsfx,我试图找到更改默认验证器装饰的正确方法,因此它使用 CSS 装饰器作为默认装饰器而不是图形,但我没有访问权限。
我制作自己的装饰器并装饰一些文本字段没问题,(我定义 css class,创建装饰器并且它有效)
但是我如何更改我的代码,使其默认使用 CSS 装饰进行验证! 示例代码:
ValidationSupport support = new ValidationSupport();
public void isMax(TextField tf, Boolean b){
Validator<String> validator = (control, value) -> {
boolean condition =
value != null
? !value
.matches(
"[\x00-\x20]*[+-]?(((((\p{Digit}+)(\.)?((\p{Digit}+)?)([eE][+-]?(\p{Digit}+))?)|(\.((\p{Digit}+))([eE][+-]?(\p{Digit}+))?)|(((0[xX](\p{XDigit}+)(\.)?)|(0[xX](\p{XDigit}+)?(\.)(\p{XDigit}+)))[pP][+-]?(\p{Digit}+)))[fFdD]?))[\x00-\x20]*" )
: value == null;
return ValidationResult.fromMessageIf(control,"not a number" ,Severity.ERROR , condition);
};
support.registerValidator( tf, b, validator );
}
所以要更改什么以便我的验证使用 CSS 样式而不是图形样式。
上面的代码有效,并提供了文本字段的图形验证,但是以下代码不起作用:
public class MyValid extends StyleClassValidationDecoration {
ValidationSupport support = new ValidationSupport();
public void isMax(TextField tf, Boolean b){
// Decorator.addDecoration(tf,new StyleClassDecoration("warning"));
support.setValidationDecorator(new StyleClassValidationDecoration());
Validator<String> validator = (control, value) -> {
boolean condition =
value != null
? !value
.matches(
"[\x00-\x20]*[+-]?(((((\p{Digit}+)(\.)?((\p{Digit}+)?)([eE][+-]?(\p{Digit}+))?)|(\.((\p{Digit}+))([eE][+-]?(\p{Digit}+))?)|(((0[xX](\p{XDigit}+)(\.)?)|(0[xX](\p{XDigit}+)?(\.)(\p{XDigit}+)))[pP][+-]?(\p{Digit}+)))[fFdD]?))[\x00-\x20]*" )
: value == null;
return ValidationResult.fromMessageIf(control,"not a number" ,Severity.ERROR , condition);
};
support.registerValidator( tf, b, validator );
}
问题是我认为我不知道将样式验证指向对应的 css classes 或者问题出在 returns ValidationResult.
例如这行代码:
Decorator.addDecoration(tf,new StyleClassDecoration("warning"));
装饰字段,并作为样式资源在我的默认 .css 文件中使用 "warning" class。 我如何为 StyleClassValidationDecoration 执行此操作?
重做以展示如何使用 StyleClassValidtionDecoration。
在 ControlsFX 中,如果使用 CSS - 您可以简单地提供 StyleClassValidationDecoration 您希望使用的 CSS 类。
ValidationSupport validator = new ValidationSupport();
validator.setValidationDecorator(new StyleClassValidationDecoration("myErrorClass", "myWarningClass"));
validator.registerValidator(fieldToValidate, false, this::myValidationForField);