JavaFX8 древовидная таблица просмотра пользовательской корневой строки
В моем древовидном табличном представлении у меня есть корневой элемент, который содержит дочерние элементы (я ошибочно назвал их корневыми элементами), которые в свою очередь имеют дочерние элементы. Мне нужно настроить внешний вид текста этих ошибочно названных строк корневых элементов. Есть такой селектор или как еще это сделать?
Благодарю.
1 ответ
Это установит псевдокласс в строке, содержащей корень:
final PseudoClass firstRowClass = PseudoClass.getPseudoClass("first-row");
treeTableView.setRowFactory(treeTable -> {
TreeTableRow<...> row = new TreeTableRow<>();
row.treeItemProperty().addListener((ov, oldTreeItem, newTreeItem) ->
row.pseudoClassStateChanged(firstRowClass, newTreeItem == treeTable.getRoot()));
return row ;
});
Теперь вы можете выбрать эту строку в CSS с
.tree-table-row-cell:first-row { ... }
Полный пример здесь
Похоже, вы хотите стилизовать непосредственные дочерние узлы корневого узла. В этом случае просто сделайте
row.treeItemProperty().addListener((ov, oldTreeItem, newTreeItem) ->
row.pseudoClassStateChanged(firstRowClass,
newTreeItem != null && newTreeItem.getParent() == treeTable.getRoot()));
вместо условия в коде выше. Очевидно, что вы можете использовать другие критерии по мере необходимости (например, ! newTreeItem.isLeaf()
).
Обратите внимание, что стандартные таблицы стилей для tree-table-row
немного странно -fx-background-color
установлен для строки, но -fx-text-fill
устанавливается как для строки, так и для клеток внутри нее. Так что если вы хотите изменить цвет фона, вам просто нужно
-tree-table-row-cell:first-row {
-fx-background-color: antiquewhite ;
}
но если вы хотите изменить цвет текста, вам нужно изменить его в ячейках:
-tree-table-row-cell:first-row .tree-table-cell {
-fx-text-fill: red ;
}