如何将 JavaFx TreeView 与 POJO 一起使用

How to use JavaFx TreeView with POJO

我创建 TreeView 像这样 link 但与 POJO 一起使用。

我有 3 个嵌套节点。 RootNode、NodeOne 和 NodeTwo。和同名 POJO.

RootNode.java

ArrayList<NodeOne> nodeone;
SimpleStringProperty name;

NodeOne.java

ArrayList<NodeTwo> nodetwo;
SimpleStringProperty name;

NodeTwo.java

SimpleStringProperty name, description;

如何在 TreeView 中使用这个 pojo?可能吗?

是的,而且也相当容易。只需遍历每个节点 类 的子节点并为它们构建 TreeItems。

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);
        }
    }
}

我生成了一些这样的示例数据:

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;
}

结果如下所示: