Как работают селекторы атрибутов в 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 */
}
Другие вопросы по тегам