Guten Abend allerseits
Ich will eine TreeView erzeugenn, nur will das Ganze nicht so wie ich. Kann mir irgendwer sagen was ich da falsch mache?
Hier mal der Code:
Die TreeView an sich ist irgendwie da, aber es werden keine Strings angezeigt. Irgendwann habe ich das mal hinbekommen, aber jetzt geht es nicht mehr. Die Treelemente sollen einfach nur einen String enthalten, aber der String wird nicht angezeigt.
Sieht jemand, was da los ist? Die Methode refreshTreeview() wird korrekt aufgerufen, und die übergebenene modelItemobjekte enthalten auch die richtigen Daten (siehe Kommentar).
Edit: Typisch...kaum poste ich die Frage, hab ich den Fehler gefunden. Pfff....
Edit 2: Wer will kann dies ja als Rätsel sehen und den Fehler trotzdem suchen. Ich löse dann auf.
Ich will eine TreeView erzeugenn, nur will das Ganze nicht so wie ich. Kann mir irgendwer sagen was ich da falsch mache?
Hier mal der Code:
Java:
public class LibraryBrowserPane extends Pane
implements
ModelObservable {
private ViewdataControllable mainview;
private VBox vbox;
private StackPane tree;
private TreeView<String> treeView;
private HashMap<TreeItem<String>, LibraryTreeitemModel> treeitemMap;
private TreeItem<String> rootItem;
private LibrarybrowserContextmenu treeContextmenu;
Address getSelectedLibrarypage() {
TreeItem<String> selectedItem;
selectedItem = treeView.getSelectionModel().getSelectedItem();
if (selectedItem == null) {
return treeitemMap.get(rootItem).getAddress();
}
else {
return treeitemMap.get(selectedItem).getAddress();
}
}
public LibraryBrowserPane(ViewdataControllable mainview) {
this.mainview = mainview;
initGUI();
}
private void initGUI() {
vbox = new VBox();
vbox.setSpacing(10);
getChildren().setAll(vbox);
tree = new StackPane();
vbox.getChildren().add(tree);
refreshTreeview();
}
private void refreshTreeview() {
HashMap<LibraryTreeitemModel, TreeItem<String>> treemap;
rootItem = new TreeItem<>();
//Create treeView items for view and link them with the according model treeView item
treemap = new HashMap<>();
for(LibraryTreeitemModel modelItem : mainview.getTreemodelOfActiveLibrary()){
TreeItem<String> viewItem = new TreeItem<>(modelItem.getName()); //modelItem.getName() liefert den String korrekt zurück, der angezeigt werden soll.
treemap.put(modelItem, viewItem);
}
//Link parents and children
for(LibraryTreeitemModel modelChild : mainview.getTreemodelOfActiveLibrary()){
LibraryTreeitemModel modelParent;
TreeItem viewChild;
TreeItem viewParent;
modelParent = (LibraryTreeitemModel) modelChild.getParent();
viewChild = treemap.get(modelChild);
viewParent = (modelParent == null) ? rootItem : treemap.get(modelChild.getParent());
viewParent.getChildren().add(viewChild);
viewParent.setExpanded(true);
}
treeView = new TreeView<>(rootItem);
//tree = new StackPane();
tree.getChildren().clear();
tree.getChildren().add(treeView);
treeView.getSelectionModel().selectedItemProperty().addListener(new ChangeListener() {
LibraryTreeitemModel selectedItem() {
return treeitemMap.get(treeView.getSelectionModel()
.getSelectedItem());
}
@Override
public void changed(ObservableValue observable, Object oldValue, Object newValue) {
// Address a = selectedItem().getAddress();
// mainview.markAnotherLibraryitemAsActive(a);
}
});
treeView.setContextMenu(treeContextmenu);
treeView.setOnContextMenuRequested(treeContextmenu);
}
@Override
public void notifyAboutChanges(ModelChange change) {
switch (change) {
case THE_ACTIVE_LIBRARY_HAS_CHANGED:
refreshTreeview(); //Todo: change only item marking.
break;
case THE_LIBRARYTREE_HAS_CHANGED:
refreshTreeview();
break;
default:
}
}
@Override
public ArrayList<ModelChange> needModelregistration() {
ArrayList<ModelChange> list = new ArrayList<>();
list.add(ModelChange.THE_ACTIVE_LIBRARY_HAS_CHANGED);
list.add(ModelChange.THE_LIBRARYTREE_HAS_CHANGED);
return list;
}
void setContextMenu(LibrarybrowserContextmenu contextmenu) {
this.treeContextmenu = contextmenu;
if (treeView != null) {
treeView.setContextMenu(treeContextmenu);
treeView.setOnContextMenuRequested(treeContextmenu);
}
}
}
Die TreeView an sich ist irgendwie da, aber es werden keine Strings angezeigt. Irgendwann habe ich das mal hinbekommen, aber jetzt geht es nicht mehr. Die Treelemente sollen einfach nur einen String enthalten, aber der String wird nicht angezeigt.
Sieht jemand, was da los ist? Die Methode refreshTreeview() wird korrekt aufgerufen, und die übergebenene modelItemobjekte enthalten auch die richtigen Daten (siehe Kommentar).
Edit: Typisch...kaum poste ich die Frage, hab ich den Fehler gefunden. Pfff....
Edit 2: Wer will kann dies ja als Rätsel sehen und den Fehler trotzdem suchen. Ich löse dann auf.
Zuletzt bearbeitet: