#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);
}
И это действительно работает, если у кого-то есть более элегантное решение, я был бы благодарен.