【发布时间】:2014-04-22 10:27:49
【问题描述】:
在我的树表视图中,我有一个根项,其中包含子项(我错误地将它们称为根项),而子项又具有子项。我需要自定义那些错误地称为根项目行的文本外观。有没有这样的选择器,不然怎么做?
谢谢。
【问题讨论】:
标签: javafx javafx-8 root-node treetableview
在我的树表视图中,我有一个根项,其中包含子项(我错误地将它们称为根项),而子项又具有子项。我需要自定义那些错误地称为根项目行的文本外观。有没有这样的选择器,不然怎么做?
谢谢。
【问题讨论】:
标签: javafx javafx-8 root-node treetableview
这将在包含根的行上设置一个伪类:
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 ;
}
【讨论】:
.tree-table-row-cell:first-row .tree-table.cell { -fx-text-fill: red; }(出于某种原因,在 modena.css 中的 tree-table-row-cell 和 tree-table-cell 中都指定了文本填充)。