在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
而不是重复使用它。
我有一个包含文件夹和子文件夹的树视图。子文件夹的叶子是 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
而不是重复使用它。