2015-04-21 4 views
0

Хотя в учебниках по стилю CSS упоминаются как таблица стилей по умолчанию (caspian.css), так и классы по умолчанию для встроенных элементов управления (например, .line для линии), мои элементы управления, похоже, не имеют (проверяется отладчиком).Встроенные элементы управления JavaFX 2.2 не имеют стиля по умолчанию

В результате, не реагируйте на дополнительные пользовательские CSS, если я не задал их класс явно, что раздражает и разрушает всю точку глобального стили CSS.

Буду признателен за любые идеи, связанные с этим.

+2

Где вы видите, что класс стиля по умолчанию для 'Line' -' .line'? В [документации] (http://docs.oracle.com/javase/8/javafx/api/javafx/scene/doc-files/cssref.html#line) указано «Пусто по умолчанию». Подклассы 'Control' имеют классы стиля по умолчанию. Других узлов нет. Также обратите внимание, что таблица стилей по умолчанию не применяется до тех пор, пока не будет создан первый 'Control'; поэтому, если вы не используете подклассы 'Control', даже таблица стилей по умолчанию не будет применяться. –

+0

О, ладно. Не знаю почему, но я был уверен, что класс стиля по умолчанию предоставляется (путем отражения) для всех подклассов узлов. Оказывается, это не так. Делает совершенный смысл. Большое спасибо и извините за trvial вопрос! Каков наилучший способ закрыть вопрос сейчас? –

+0

Ну ... может быть, мы оба ошибаемся в этом. См. Http://stackoverflow.com/questions/28086092/javafx-style-by-classname. Таким образом, вы можете использовать 'Line' в качестве селектора, но не' .line' –

ответ

1

В JavaFX поддерживаются три CSS-селектора, которые аналогичны Селекторам типов, Селекторам классов и идентификаторам в стандартном CSS. Важно быть немного осторожным со словом «класс», который имеет разные значения в мире Java и мире CSS: класс Java - это тип CSS; класс CSS устанавливается на узле через свойство, называемое styleClass.

Селектор типов определяется результатом вызова метода getTypeSelector, который объявлен в интерфейсе Styleable. Node реализует этот интерфейс, и реализует getTypeSelector вернуть

GetClass() GetName() без имени пакета

Так любойNode может быть стилизованной, указав его простое имя класса:.

Label { 
    -fx-text-fill: green ; 
} 
Line { 
    -fx-stroke: red ; 
} 

т.д.

классов CSS определяются методом getStyleClass() в Styleable, который возвращает список строк. (Обратите внимание, что узлы могут иметь несколько классов стилей, хотя я никогда не понимал, почему это , а не Set.) По умолчанию этот список пуст, но подклассы Control устанавливают это значение через свой скин по умолчанию как «css- ized "версия названия класса (Button становится button, ComboBox становится combo-box, и т.п.). Таким образом

.label { 
    -fx-text-fill: green ; 
} 

работает, но

.line { 
    -fx-stroke: red ; 
} 

не работает без предварительной настройки класс стиля:

Line line = new Line(); 
line.getStyleClass().add("line"); 

Наконец, ID селекторы работу, указав идентификатор на узле. Идентификаторы должны быть уникальными среди всех узлов графа сцены. Таким образом, вы можете сделать

Line line = new Line(); 
line.setId("my-line"); 

с

#my-line { 
    -fx-stroke: red ; 
} 

Таким образом, в вашем примере, класс стиль не установлен по умолчанию (Line не Control подкласс). Вы должны либо установить его «вручную», либо использовать селектор типов.

Последнее примечание: вы упомянули, что ваша линия «отсутствует caspian.css».Я не совсем уверен, что это значит (поскольку Line s вообще не стилизованы таблицей стилей по умолчанию), но таблица стилей по умолчанию загружается только при создании экземпляра Control. Это предназначено для повышения производительности графиков сцен, которые не используют элементы управления (и, таким образом, в любом случае не будут использоваться стили по умолчанию).

Смежные вопросы