【问题标题】:JavaFX8 tree table view custom root rowJavaFX8树表视图自定义根行
【发布时间】:2014-04-22 10:27:49
【问题描述】:

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

谢谢。

【问题讨论】:

    标签: javafx javafx-8 root-node treetableview


    【解决方案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 { ... }
    

    完整示例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 ;
    }
    

    【讨论】:

    • 我试过了,让它工作。如果您要更改文本填充,您可能需要在外部 css 中使用 .tree-table-row-cell:first-row .tree-table.cell { -fx-text-fill: red; }(出于某种原因,在 modena.css 中的 tree-table-row-celltree-table-cell 中都指定了文本填充)。
    • 还是没有运气..我不知道为什么,会不会是我有一个包含多个可见根项的全局不可见根项?
    • 是的,但它是我在上面的评论中描述的情况..只有第一个全局根项目以红色显示
    • 我认为这就是您要找的。你说的是“根行”。 TreeView 或 TreeTableView 只有一个根离子。
    • 好的,我想我应该重新提出问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多