Intro:
I am currently working on my first TreeView
in JavaFX.
The example given in the documentation is the following:
TreeItem<String> root = new TreeItem<String>("Root Node");
root.setExpanded(true);
root.getChildren().addAll(
new TreeItem<String>("Item 1"),
new TreeItem<String>("Item 2"),
new TreeItem<String>("Item 3")
);
TreeView<String> treeView = new TreeView<String>(root);
In this example, we build the TreeItem
tree structure manually, i.e., calling getChildren()
on every node that has children and adding these.
Question:
Is it possible to tell a TreeItem
to "dynamically" build its children? It would be perfect if I could define the parent-child-relationship as a function.
I would be looking for something like the following:
// Function that generates the child tree items for a given tree item
Function<TreeItem<MyData>, List<TreeItem<MyData>>> childFunction = parent -> {
List<TreeItem<MyData>> children = new ArrayList<>(
parent. // TreeItem<MyData>
getValue(). // MyData
getChildrenInMyData(). // List<MyData>
stream().
map(myDataChild -> new TreeItem<MyData>(myDataChild)))); // List<TreeItem<MyData>>
// The children should use the same child function
children.stream().forEach(treeItem -> treeItem.setChildFunction(childFunction));
return children;
};
TreeItem<MyData> root = new TreeItem<MyData>(myRootData);
root.setExpanded(true);
// THE IMPORTANT LINE:
// Instead of setting the children via .getChildren().addAll(...) I would like to set a "child function"
root.setChildFunction(childFunction);
TreeView<MyData> treeView = new TreeView<String>(root);
TreeItem
. I posted it as answer. – Comma