JavaFX: приложение для стилей с селекторами CSS

у меня есть пара вопросов о стиль приложения JavaFX с селекторами CSS (например: .table-view для каждого TableView).

Я создал основной CSS-файл, в котором я хочу Определить универсальные свойства стиля для моего приложения. Например: каждый TableView получает тот же цвет в каждом экране. Я просто импортирую Main.css в каждом .css, который связан с a .файл fxml.

теперь я хотел бы стиль каждый HBox в a 'sidebar' таким же образом. Я пробовал это так (как предложено в документации Oracle):

.sidebar > .hbox {
    /* Just some styling */
}

это не работает, к моему удивлению, но следующие куски кода работают:

.sidebar > HBox {
    /* Just some styling */
}

.sidebar HBox {
    /* Just some styling */
}
это как-то связано с тем, что .sidebar пользовательский стиль, но я не уверен в этом.

Итак, мои вопросы:

1. Почему первый не работает?

2. Что должно быть как это сделать? (с .hbox или HBox и > или ничего?)

1 ответов


как вы можете видеть в документации CSS HBOX класса нет класса стиль определен. Поэтому вы не можете просто использовать .hbox http://docs.oracle.com/javase/8/javafx/api/javafx/scene/doc-files/cssref.html#hbox

если вы хотите искать только прямые дочерние элементы панели инструментов > знак можно использовать. С помощью > вход в селектор CSS будет иметь некоторое преимущество в вопросах производительности, потому что, делая это, не полная дочерняя иерархия под Панель управления должна быть отсканирована. Поиск совпадающих узлов будет осуществляться только в первой иерархии дочерних узлов.

так что если вы хотите выбрать все кнопки, которые являются прямыми дочерними боковой панели, вы можете сделать следующее:

. sidebar > .button

но если вы действительно хотите, чтобы все кнопки в боковой панели (даже если они завернуты в листы и т. д.) необходимо использовать следующий селектор:

.sidebar .button

вернемся к вашему вопросу HBOX: даже если HBOX не имеет определенного класса стиля (.hbox) она имеет тип, который может использоваться для выбора типа. Как описано в CSS doc, все узлы имеют тип:

метод Gettypeselector узла возвращает строку, аналогичную Селектор типов CSS. По умолчанию этот метод возвращает простое имя класс. Обратите внимание, что простое имя внутреннего класса или анонимный класс не может использоваться в качестве селектора типов. В таком случае, этот метод следует переопределить, чтобы вернуть значение значение.

из-за этого селектор HBOX работает.