我在我的项目中使用controlsfx,并且我试图找到更改默认验证器装饰的正确方法,因此它使用CSS装饰器作为默认值而不是图形,但我无法访问。
我没有问题来制作我自己的装饰器,并装饰一些文本字段,(我定义css类,创建装饰器,它的工作原理)
但我如何改变我的代码,它使用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 );
}
问题是我认为我不知道将stylevalidation指向相应的css类,或者问题是在返回ValidationResult的行中。
例如这行代码:
Decorator.addDecoration(tf,new StyleClassDecoration("warning"));
装饰字段,并且样式资源在我的默认.css文件中使用“warning”类。 我怎么能为StyleClassValidationDecoration做这个?
答案 0 :(得分:1)
重做以显示如何使用StyleClassValidtionDecoration。
在ControlsFX中,如果使用CSS - 您可以简单地为StyleClassValidationDecoration提供您希望使用的CSS类。
ValidationSupport validator = new ValidationSupport();
validator.setValidationDecorator(new StyleClassValidationDecoration("myErrorClass", "myWarningClass"));
validator.registerValidator(fieldToValidate, false, this::myValidationForField);