Hallo zusammen,
ich versuche Einträge der Datenbank als TreeView abzubilden und laufe die Ganze Zeit gegen ein Exception.
Was mache ich da falsch?
Was viel komischer ist bei der Methode #buildTreeItems bekomme ich immer "Root"-DB Row zurück, d.h. der läuft da in eine Endlosschleife oder?
Viele Grüße
lam
ich versuche Einträge der Datenbank als TreeView abzubilden und laufe die Ganze Zeit gegen ein Exception.
Was mache ich da falsch?
Java:
private Map<Long, Category> registry = new TreeMap<>();
public Category buildTree(List<Category> models) {
registry.clear();
Long firstElement = null;
for (Category model : models) {
if (firstElement == null) {
firstElement = model.getId();
}
registry.put(model.getId(), model);
}
registry.values().forEach(nav -> {
Long parentId = nav.getId();
for (Category category : models) {
if (parentId==category.getParentId()) {
nav.getChildren().add(category);
}
}
});
return registry.get(firstElement);
}
private void buildTreeItems(TreeItem<Category> parentItem, Category element) {
TreeItem<Category> newItem = new TreeItem<>(element);
parentItem.getChildren().add(newItem);
System.out.println(element.getName());
if (!element.getChildren().isEmpty()) {
List<Category> children = element.getChildren();
children.forEach(c -> buildTreeItems(newItem, c));
}
}
private void initTreeView() {
List<Category> categories = AppContext.getInstance(CategoryRepository.class).findAll();
Category root = buildTree(categories);
TreeItem<Category> rootItem = new TreeItem<>(
new Category("Categories", LocalDateTime.now(), LocalDateTime.now(), -1));
buildTreeItems(rootItem, root);
treeView.setRoot(rootItem);
treeView.setCellFactory(param -> new TreeCell<Category>() {
@Override
protected void updateItem(Category item, boolean empty) {
super.updateItem(item, empty);
if (item == null || empty) {
setText(null);
} else {
setText(item.getName());
}
}
});
}
Was viel komischer ist bei der Methode #buildTreeItems bekomme ich immer "Root"-DB Row zurück, d.h. der läuft da in eine Endlosschleife oder?
Viele Grüße
lam