Yes, and it's fairly easy as well. Just iterate over the children of every of your node classes and construct TreeItem
s for them.
public void initData(RootNode data)
{
TreeItem<String> rootItem = new TreeItem<>();
rootItem.valueProperty().bind(data.nameProperty());
treeView.setRoot(rootItem);
for (NodeOne nodeOne : data.getNodes())
{
TreeItem<String> oneItem = new TreeItem<>();
oneItem.valueProperty().bind(nodeOne.nameProperty());
rootItem.getChildren().add(oneItem);
for (NodeTwo nodeTwo : nodeOne.getNodes())
{
TreeItem<String> twoItem = new TreeItem<>();
twoItem.valueProperty().bind(nodeTwo.nameProperty().concat(": ").concat(nodeTwo.descriptionProperty()));
oneItem.getChildren().add(twoItem);
}
}
}
And I generated some sample data like this:
private RootNode makeData()
{
RootNode rootNode = new RootNode();
rootNode.setName("Root");
for (int i = 0; i < 20; i++)
{
NodeOne nodeOne = new NodeOne();
nodeOne.setName("One Node 0b" + Integer.toBinaryString(i));
rootNode.getNodes().add(nodeOne);
for (int j = 0; j < 20; j++)
{
NodeTwo nodeTwo = new NodeTwo();
nodeTwo.setDescription("Another node #" + j);
nodeTwo.setName("0x" + Integer.toHexString(j));
nodeOne.getNodes().add(nodeTwo);
}
}
return rootNode;
}
The result looks like this:
