有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java将TreeView的子项、子项、子项着色

我正在制作一个显示字符串树视图的程序。 当我制作一个树状视图时,有没有任何方法可以直接在CSS中根据项目的级别对字符串进行着色

treeView.getStylesheets().add("style.css");

.tree-cell:sub-tree-item {
    -fx-text-fill: red;
}

.tree-cell:sub-tree-item:sub-tree-item { /*Does exists something similar of this?? */
    -fx-background-color: green ;
}
...

或者我必须制作标签

        TreeItem treeNode1 = new TreeItem("");
        Label lteste11=new Label("myLevelIs1");
        lteste11.setTextFill(Color.RED);
        treeNode1.setGraphic(lteste11);

        TreeItem treeNode2 = new TreeItem("");  
        Label lteste22=new Label("myLevelIs2");
        lteste22.setTextFill(Color.GREEN);
        treeNode2.setGraphic(lteste22);
        
        TreeItem treeNodeROOT = new TreeItem(); 
        treeNodeROOT.getChildren().addAll(treeNode1, treeNode2);
        treeView.setRoot(treeNodeROOT);

??还有别的办法吗? enter image description here


共 (1) 个答案

  1. # 1 楼答案

    可以使用自定义单元工厂根据深度添加样式类:

    TreeView<String> tree = ... ;
    
    tree.setCellFactory(tv -> new TreeCell<>() {
        @Override
        protected void updateItem(String item, boolean empty) {
            super.updateItem(item, empty) ;
            getStyleClass().removeIf(s -> s.startsWith("depth"));
            if (empty || item == null) {
                setText("");
            } else {
                int depth = 0 ;
                for (TreeItem<String> i = getTreeItem().getParent() ; i != null ; i = i.getParent()) {
                    depth++ ;
                }
                getStyleClass().add("depth"+depth);
                setText(item);
            } 
        }
    });
    

    然后在样式表中只需执行以下操作:

    .tree-cell.depth1 {
        -fx-text-fill: red ;
    }
    .tree-cell.depth2 {
        -fx-background-color: green ;
    }
    

    你想支撑多少深度就支撑多少深度