Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为TreeView的子项、子项、子项着色_Java_Javafx_Treeview - Fatal编程技术网

Java 为TreeView的子项、子项、子项着色

Java 为TreeView的子项、子项、子项着色,java,javafx,treeview,Java,Javafx,Treeview,我正在制作一个显示字符串树视图的程序。 当我制作一个树状视图时,是否有任何方法可以直接在CSS中根据项目的级别对字符串ITEN着色 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

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

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

??还有别的办法吗?

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

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

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

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);
        } 
    }
});
你想支持多少深度就支持多少深度