Hallo Zusammen,
mit dem SceneBuilder habe ich eine Anwendung mit einem TreeView erstellt. Funktioniert soweit alles gut. Nun habe ich versucht Icons hinzu zu fügen. Diese werden allerdings nicht angezeigt.
Zuerst wird in der Main Klasse buildTreeView(), der sich in der MainController befindet, aufgerufen:
Der Funktion buildTreeView() sieht wie folgt aus:
Zur guter letzt habe ich im Internet ein FileItemTree-Klasse gefunden und nach meine bedürfnisse angepasst:
Irgendwie sehe ich vor lauter Bäume den Wald nicht mehr.
Ich hoffe jemand kann mir ein virtueller Ventilator einschalten damit sich der realler Nebel lichtet. 😉
Im voraus schon mal tausend Dank.
Grüße Raymond
mit dem SceneBuilder habe ich eine Anwendung mit einem TreeView erstellt. Funktioniert soweit alles gut. Nun habe ich versucht Icons hinzu zu fügen. Diese werden allerdings nicht angezeigt.
Zuerst wird in der Main Klasse buildTreeView(), der sich in der MainController befindet, aufgerufen:
Java:
MainController mainCtrl = loader.getController();
mainCtrl.buildTreeView();
Java:
public void buildTreeView() {
File file = new File(this.prop.getProperty("paths.workspace"));
ftItem = new FileTreeItem(file);
expandTreeView(ftItem);
tvFileList.setRoot(ftItem);
}
private void expandTreeView(TreeItem<?> item) {
if (item != null && !item.isLeaf()) {
item.setExpanded(true);
for (TreeItem<?> child : item.getChildren()) {
expandTreeView(child);
}
}
}
Java:
public class FileTreeItem extends TreeItem<File> {
private boolean isFirstTimeChildren = true;
private boolean isFirstTimeLeaf = true;
private boolean isLeaf;
private boolean isDirectory;
private String fullPath;
public static Image folderCollapseImage = new Image("file:src/data/icons/16x16/folder_stand.png");
public static Image folderExpandImage = new Image("file:src/data/icons/16x16/folder.png");
public static Image fileImage = new Image("file:src/data/icons/16x16/document_index.png");
@SuppressWarnings({ "rawtypes", "unchecked" })
public FileTreeItem(File f) {
super(f);
if (f.isDirectory()) {
this.isDirectory = true;
this.setGraphic(new ImageView(folderExpandImage));
} else {
this.isDirectory = false;
this.setGraphic(new ImageView(fileImage));
// if you want different icons for different file types this is where you'd do it.
}
this.addEventHandler(TreeItem.branchExpandedEvent(), new EventHandler() {
@Override
public void handle(Event event) {
FileTreeItem source = (FileTreeItem) event.getSource();
if (source.isDirectory && source.isExpanded()) {
ImageView iv = (ImageView) source.getGraphic();
iv.setImage(folderExpandImage);
}
}
});
this.addEventHandler(TreeItem.branchCollapsedEvent(), new EventHandler() {
@Override
public void handle(Event event) {
FileTreeItem source = (FileTreeItem) event.getSource();
if (source.isDirectory() && !source.isExpanded()) {
ImageView iv = (ImageView) source.getGraphic();
iv.setImage(folderCollapseImage);
}
}
});
}
public boolean isDirectory() {
return (this.isDirectory);
}
public String getFullPath() {
return (this.fullPath);
}
@Override
public ObservableList<TreeItem<File>> getChildren() {
if (isFirstTimeChildren) {
isFirstTimeChildren = false;
super.getChildren().setAll(buildChildren(this));
}
return super.getChildren();
}
@Override
public boolean isLeaf() {
if (isFirstTimeLeaf) {
isFirstTimeLeaf = false;
File f = (File) getValue();
isLeaf = f.isFile();
}
return isLeaf;
}
private ObservableList<TreeItem<File>> buildChildren(TreeItem<File> TreeItem) {
File f = TreeItem.getValue();
if (f != null && f.isDirectory()) {
File[] files = f.listFiles();
if (files != null) {
ObservableList<TreeItem<File>> children = FXCollections.observableArrayList();
for (File childFile : files) {
children.add(new FileTreeItem(childFile));
}
return children;
}
}
return FXCollections.emptyObservableList();
}
}
Ich hoffe jemand kann mir ein virtueller Ventilator einschalten damit sich der realler Nebel lichtet. 😉
Im voraus schon mal tausend Dank.
Grüße Raymond