Я хотел бы иметь объект (элемент управления или свойство), который имеет разные состояния, которые могут быть окрашены CSS.Использовать стиль только для чтения в JavaFX?
Например, обратите внимание на TextField, который может содержать два типа значений, нормальный и ошибочный. Когда он содержит ошибочное значение, он должен быть отображен «красным». Но фактический цвет должен быть определен из CSS.
Можно ли это реализовать?
Я нашел много интерфейсов или классов Styleable*
, но они выглядят как способные принять любой стиль.
Могу ли я написать и сущность, которая выводит ее стиль из значения?
'PseudoClass' намного проще управлять булевым состоянием, так как оно либо установлено, либо не установлено. Регулярные классы CSS хранятся как 'Список'' String ', связанных с каждым узлом. Поскольку это «Список», он может содержать дубликаты. Поэтому, когда вы можете добавлять и удалять классы стилей из этого списка, вы должны быть осторожны, чтобы не добавлять несколько копий данного класса стилей (если это действительно так, как вы хотите, по какой-то причине). Следовательно, для подобных случаев использование «PseudoClass» имеет тенденцию приводить к созданию более чистого кода. –
Спасибо за объяснение! Существует ли определенное поведение, когда класс стиля присутствует несколько раз для узла (либо для JavaFX, либо для простого CSS)? Я не уверен, что могу думать о разумном поведении, рассматривая его как появление только один раз. – Itai
Правила сопоставления CSS просто смотрят, есть ли класс стиля на узле или нет. Поэтому, если он добавлен несколько раз в список, он соответствует классу. Проблемы могут возникнуть, если вы попытаетесь удалить его: 'myNode.getStyleClass(). Remove (" some-style ");' удаляет первое вхождение, поэтому, если вы случайно добавили его несколько раз, это (возможно) выиграло «У вас есть тот эффект, который вы ищете ... Это может быть очень сложно, например в реализациях пользовательских ячеек, где вы не имеете большого контроля над вызовом 'updateItem()'. –