验证控件中的可观察值fx



>我有以下代码

  public ValidationResult notNull(Control control, String content) {
        boolean condition = content.length() <=0;
        return ValidationResult.fromMessageIf(control, "Field is empty!", Severity.WARNING, condition);
    }

它检查文本字段中是否有任何字符,

我这样称呼它

validator = new ValidationSupport();
validator.registerValidator(itemIdTf,vals::notNull);

最后是这样做

validator.invalidProperty().addListener((observable, oldValue, newValue) -> {
            itemIdTf.pseudoClassStateChanged(PseudoClass.getPseudoClass("negative"), oldValue);});
这是有效的,它为某些控件设置伪类,

当我在同一个验证器上有几个文本字段控件时,它必须等待所有控件都经过验证才能更改伪类。

所以我想也许在 ValidationResult 方法中做到这一点,因为我认为使用许多验证器可能不好。我不知道这是否可能,我需要一些每个控件唯一的侦听器,而不是用于验证结果。

好吧,我找到了一些有效的东西,但它仍然留下了一些未解决的问题:

  public ValidationResult notNull(Control control, String content) {

        boolean condition = content.length() <=0;
      control.pseudoClassStateChanged(positive,!condition);
        return ValidationResult.fromMessageIf(control, "Field is empty!", Severity.ERROR, condition);
    }

我正在使用CSS样式验证器,所以来自这一行的东西不起作用(至少不是全部(

return ValidationResult.fromMessageIf(control, "Field is empty!", Severity.ERROR, bp.getValue());

上面有字符串"字段为空",它应该是控件的工具提示,但它从未设置过,所以我只是在验证中创建了自己的工具提示并将其添加到控件中。

然后整个事情看起来像这样:

PseudoClass positive = PseudoClass.getPseudoClass("positive");
    final Tooltip notNullTooltip = new Tooltip("Must have some value");
      public ValidationResult notNull(Control control, String content) {
            boolean condition = content.length() <=0;
          control.pseudoClassStateChanged(positive,!condition);
          control.setTooltip(notNullTooltip);
            return ValidationResult.fromMessageIf(control, "Field is empty!", Severity.ERROR, condition);
        }

它确实有效,如果有人有更优雅的解决方案,我将不胜感激。

最新更新