如何更改默认的Validator Decoration controlsfx

时间:2017-03-24 19:20:41

标签: javafx controlsfx

我在我的项目中使用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做这个?

1 个答案:

答案 0 :(得分:1)

重做以显示如何使用StyleClassValidtionDecoration。

在ControlsFX中,如果使用CSS - 您可以简单地为StyleClassValidationDecoration提供您希望使用的CSS类。

    ValidationSupport validator = new ValidationSupport();
    validator.setValidationDecorator(new StyleClassValidationDecoration("myErrorClass", "myWarningClass"));
    validator.registerValidator(fieldToValidate, false, this::myValidationForField);