在JavaFX树视图中,如何为所有项设置图标?

时间:2015-01-19 06:33:50

标签: javafx

我有一个包含文件夹和子文件夹的树视图。子文件夹的叶子是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();
}

1 个答案:

答案 0 :(得分:4)

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

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