Я использую проверки controlsfx для проверки определенных текстовых полей, и у меня есть 2 вопроса, которые касаются практически одной и той же темы, поэтому я задам оба вопроса:
Я регистрирую валидатор
validator.setValidationDecorator(new StyleClassValidationDecoration("myErrorClass", "myWarningClass"));
и я сделал стиль их обоих, и это прекрасно работает.Когда я выбираю валидатор ошибок, мой неудачный стиль вводится, если валидатор не выполняется.Так что эта часть работает нормально, а также, когда валидатор удовлетворен, поле выглядит «нормальным», так что я также могу стилизовать этот внешний вид по умолчанию.хотя я хотел бы иметь 3 этапа визуального представления, в самом начале приложения поле должно быть стилизовано так, чтобы оно показывало пользователю, что это поле является обязательным, а затем, когда изменяется состояние текстового поля, стиль также должен меняться, либо на успех, либо на стиль ошибок.Я не знаю, имеют ли средства управления controlfx такую функциональность или мне придется делать это с псевдоклассами (и как?).
То, что я хочу, эточто-то похожее на это изображение.
Второй вопрос: у этих полей есть эти метки в конце (я обвел один из них красным). Можно ли это сделать с помощью css javafx и текстового поля илиЯ должен использовать текстовый поток или какую-то другую библиотеку третьей части.
Я сделал что-то подобное, и это работает, хотя я не знаю, является ли это лучшим решением,
CustomTextField ctf = new CustomTextField();
support.setValidationDecorator(new StyleClassValidationDecoration("myErrorClass", "myWarningClass"));
support.registerValidator(ctf, true, vald::checkContainsE);
myLabel.setMinWidth(5);
myLabel.setMinHeight(20);
ctf.setRight(myLabel);
support.invalidProperty().addListener((observable, oldValue, newValue) -> ctf.pseudoClassStateChanged(PseudoClass.getPseudoClass("negative"), oldValue));
support.invalidProperty().addListener((observable, oldValue, newValue) -> myLabel.pseudoClassStateChanged(PseudoClass.getPseudoClass("negative"), oldValue));
и css
.custom-text-field:negative{
-fx-background-color: lightblue;
}
#testlabel{
-fx-background-color: red;
}
#testlabel:negative{
-fx-background-color: green;
}
Теперь это работает, но мне интересно, насколько это эффективно, есть ли способ присвоить псевдокласс всем типам элементов управления, например, псевдокласс для всех типов кнопок или типов меток, или мне нужно написать метода затем примените его ко всем нужным кнопкам или меткам.
Другой вариант - просто расширить пользовательское текстовое поле и написать свой собственный элемент управления.