Наблюдаемое значение в controlsfx проверки

#javafx #controlsfx

#javafx #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);});
  

И это работает, оно устанавливает псевдокласс для определенного элемента управления, однако, когда у меня есть несколько элементов управления текстовыми полями для одной и той же проверки, он должен дождаться, пока все они будут проверены, прежде чем изменять псевдокласс.

поэтому я подумал, возможно, сделать это в методе ValidationResult, потому что я думаю, что использовать много валидаторов, вероятно, нехорошо. Как бы то ни было, я не знаю, возможно ли это, мне нужен какой-то слушатель, который уникален для каждого элемента управления, а не для результата проверки.

Ответ №1:

ну, я нашел кое-что, что работает, но это все еще оставляет некоторые вопросы без ответа :

   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);
        }
  

И это действительно работает, если у кого-то есть более элегантное решение, я был бы благодарен.