JavaFX树表视图自定义根行

时间:2014-04-22 10:27:50

标签: javafx javafx-8 root-node treetableview

在我的树表视图中,我有一个根项目,其中包含子项目(我错误地将它们称为根项目),而子项目又包含子项目。我需要自定义那些错误地称为根项目的行文本外观。是否有这样的选择器或者如何做呢?

感谢。

1 个答案:

答案 0 :(得分:1)

这将在包含root的行上设置伪类:

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 { ... }

完整示例here

听起来您想要为根节点的直接子节点设置样式。在这种情况下,只需执行

    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 ;
}