如何将JavaFx TreeView与POJO一起使用

时间:2016-03-30 10:58:50

标签: java javafx treeview pojo

我像link一样创建TreeView,但使用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?有可能吗?

1 个答案:

答案 0 :(得分:1)

是的,它也相当容易。只需迭代每个节点类的子节点并为它们构造TreeItem

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

结果如下:

enter image description here