验证控件中的可观察值fx
Observable value in validation controlsfx
我有以下代码
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);});
这行得通,它为某些控件设置了伪 class,但是当我在同一个验证器上只有很少的文本字段控件时,它必须等待所有控件都经过验证才能更改伪 class.
所以我想也许可以在 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());
上面有字符串 "Field is empty",它应该是控件的工具提示,但它从未设置过,所以我只是在验证中创建了自己的工具提示,并将其添加到控件中。
然后整个事情看起来像这样:
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);
}
它确实有效,如果有人有更优雅的解决方案,我将不胜感激。
我有以下代码
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);});
这行得通,它为某些控件设置了伪 class,但是当我在同一个验证器上只有很少的文本字段控件时,它必须等待所有控件都经过验证才能更改伪 class.
所以我想也许可以在 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());
上面有字符串 "Field is empty",它应该是控件的工具提示,但它从未设置过,所以我只是在验证中创建了自己的工具提示,并将其添加到控件中。
然后整个事情看起来像这样:
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);
}
它确实有效,如果有人有更优雅的解决方案,我将不胜感激。