在JavaFX treeview 中,如何为所有项目设置图标?

In JavaFX treeview, how to set icons for all the items?

我有一个包含文件夹和子文件夹的树视图。子文件夹的叶子是 json 个文件。我已经为文件夹和树叶设置了图标。现在,只有根文件夹有图像。展开时,子文件夹会以箭头标记列出,但不会列出文件夹图标。展开箭头时,会显示图标。如何解决这个问题?

  private  Node rootIcon = new ImageView(new Image(Main.class.getResourceAsStream("images/folder2.png")));
  private  Node jsonImage = new ImageView(new Image(Main.class.getResourceAsStream("images/jsonImage1.png")));

public ObservableList<TreeItem<File>> buildChildren(TreeItem<File> treeItem) {
    File f = treeItem.getValue();
    f.getName();
    if(treeItem.getValue().isDirectory()){
    treeItem.setGraphic(rootIcon);
    }else{
        treeItem.setGraphic(jsonImage);
    }
        if (f != null) {
        File[] files = f.listFiles();
        if (files != null) {
            ObservableList<TreeItem<File>> children = FXCollections.observableArrayList();
            ChildTreeItem child2=null;
            ChildFileTreeItem childFiles=null;
            for (File childFile : files) {
                try {
                    if(childFile.isDirectory()){
                    child2 = new ChildTreeItem(childFile);
                    //child2.setSplitPane(ApplicationContext.getSplitPane());
                    children.add(child2);
                    }else{
                        childFiles=new ChildFileTreeItem(childFile);
                        //childFiles.setSplitPane(ApplicationContext.getSplitPane());
                        childFiles.setGraphic(jsonImage);
                        children.add(childFiles);
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }

            }

            return children;
        }
    }

    return FXCollections.emptyObservableList();
}

在 JavaFX 中,一个 Node 只能同时包含在一个 Parent 元素中。

因此您应该将 Image 存储为成员变量并为每个 TreeItem 创建一个新的 ImageView 而不是重复使用它。