Как работают селекторы атрибутов в JavaFX?
В Руководстве по справке J avaFX C SS ясно, что
JavaFX Cascading Style Sheets (CSS) основан на W3C CSS версии 2.1 [1] с некоторыми дополнениями из текущей работы над версией 3 [2].
В JCRG они часто ссылаются непосредственно на Справочное руководство CSS по W3C, и так обстоит дело, когда они говорят о селекторах.
В JCRG они упоминают селекторы типов, селекторы классов и селекторы идентификаторов - они даже говорят о том, что не поддерживают структурные псевдоклассы - но ничего не сказано о селекторах атрибутов.
Если JavaFX поддерживает их, как они работают? Что JavaFX считает атрибутом? Я думал, что движок CSS может смотреть на атрибуты в FXML, но тогда не все графы сцен происходят из FXML.
1 ответ
Атрибуты FXML просто устанавливают свойства соответствующих объектов. По сути, "селекторов свойств" не существует, но некоторые узлы будут устанавливать псевдоклассы в том и только в том случае, если установлены определенные свойства (они задокументированы в ссылочном руководстве, на которое вы ссылаетесь). Итак, суть в том, что нет прямого эквивалента селекторов атрибутов, если они не отображаются непосредственно в псевдокласс.
Обратите внимание, что вы всегда можете наблюдать за свойством и устанавливать / отменять пользовательский псевдокласс, если вам нужно поддерживать CSS на основе свойства. Таким образом, всегда можно преобразовать селектор атрибута в псевдокласс.
Например, предположим, что вы хотите по-другому оформить текстовое поле, если оно имеет "alignment=CENTER_RIGHT"
приписывать. Вы могли бы сделать
TextField textField = new TextField();
PseudoClass rightAligned = PseudoClass.getPseudoClass("right-aligned");
textField.alignmentProperty().addListener((obs, oldAlignment, newAlignment) ->
textField.pseudoClassStateChanged(rightAligned, newAlignment == Pos.CENTER_RIGHT));
Тогда в вашем CSS вам просто нужно
.text-field:right-aligned {
/* style rules */
}