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 ;
}
Другие вопросы по тегам