如何更改默认的 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);