В J avaFX C SS R eference G uide, ясно, что

Каскадные таблицы стилей (CSS) JavaFX основаны на версии 2.1 W3C CSS [1] с некоторыми дополнениями из текущей работы над версией 3 [2].

В JCRG они часто ссылаются непосредственно на Справочное руководство W3C по CSS, и это тот случай, когда они говорят о селекторах.

В JCRG они упоминают селекторы типов, селекторы классов и ID Selectors - они даже заходят так далеко, что говорят, что они не поддерживают структурные псевдоклассы, но о < a href = "https://www.w3.org/TR/selectors-3/#attribute-selectors" rel = "nofollow noreferrer"> Селекторы атрибутов .

Если JavaFX их поддерживает, как они работают? Что JavaFX считает атрибутом? Я думал, что движок CSS может смотреть на атрибуты в FXML, но тогда не все графы сцены происходят из FXML.

2
Brad Turek 1 Мар 2018 в 04:30

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 */
}
2
James_D 1 Мар 2018 в 19:49