2016-03-30 4 views
0

Я создаю TreeView как этот link, но используя с POJO.Как использовать JavaFx 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; 

Как я могу использовать этот POJO внутри в TreeView? Является ли это возможным?

ответ

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

+0

Хороший ответ, спасибо :) –