JavaFX8树表视图自定义根行



在我的树表视图中,我有一个根项,它包含子项(我错误地称它们为根项),而这些子项又有子项。我需要自定义那些被错误地称为根项目行的文本外观。有这样的选择器吗?否则该怎么做?

谢谢。

这将在包含根的行上设置一个伪类:

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

相关内容

  • 没有找到相关文章

最新更新