2015-03-02 81 views
1

在我的TreeTableView TreeItem相貌平平的时间和这样的:创建嵌套TreeItem JavaFX中

//////////////////row////////////////////////////// 
    for (Entry<String, String> entryRow : dc.getSortedfuncAll().entrySet()) { 
     root.getChildren().add(new TreeItem<String>(entryRow.getValue())); 

    } 
    // ////////////////treetable//////////////////////////// 
    final TreeTableView<String> treeTableView = new TreeTableView<>(root); 
  • AUF_1086686287581_9999
  • AUF_1086686329972_10049
  • AUF_1079023138936_6682
  • AUF_1087981634453_7022
  • AUF_1060589919844_59496
  • AUF_1421268568003_1743
  • AUF_1422451819445_14260
  • AUF_1421268533080_1741
  • AUF_1421268719761_1776
  • AUF_1421272434570_1781
  • AUF_1421268568003_1743

考虑让它们之间存在以下关系: 它是TreeMap<String,ArrayList<String>>结果:

{AUF_1060589919844_59496=[AUF_1086686287581_9999,AUF_1086686329972_10049,AUF_1079023138936_6682], 
AUF_1087981634453_7022=[AUF_1421268533080_1741, AUF_1421268568003_1743], 
AUF_1421268533080_1741=[AUF_1421268719761_1776], 
AUF_1421272434570_1781=[AUF_1087981634453_7022], 
AUF_1422451819445_14260=[AUF_1421268568003_1743]} 

我想他们有层次是这样的:

  • AUF_1060589919844_59496
    • AUF_1079023138936_6682
    • AUF_1086686287581_9999
    • AUF_1086686329972_10049
  • AUF_1421272434570_1781
    • AUF_1087981634453_7022
      • AUF_1421268568003_1743
        • AUF_1421268533080_1741
        • AUF_1421268719761_1776
  • AUF_1422451819445_14260
    • AUF_1421268568003_1743

我应该在哪里尝试申请呢? (细胞工厂?),你能找出一种方法来建立嵌套关系吗?

回答

2

这里是一个übernimmt你知道和供应作为输入初始树根前手的解决方案。

解决方案的工作由递归遍历数据结构,以确定矿在树每个层次要记录的TreeItems。输入图中的解决方案不是循环的。如果输入数据中有周期,解决方案将永远循环。

该解决方案在显示树之前创建所有树项目值,而不是在用户单击以扩展该级别时确定给定级别的树项目值。

hierarchy

import javafx.application.Application; 
import javafx.scene.Scene; 
import javafx.scene.control.TreeItem; 
import javafx.scene.control.TreeView; 
import javafx.stage.Stage; 

import java.util.Arrays; 
import java.util.List; 
import java.util.TreeMap; 
import java.util.stream.Collectors; 

public class NestedTree extends Application { 
    @Override 
    public void start(Stage stage) { 
     // create some sample data. 
     TreeMap<String, List<String>> data = new TreeMap<>(); 

     data.put("AUF_1060589919844_59496", Arrays.asList("AUF_1086686287581_9999", "AUF_1086686329972_10049", "AUF_1079023138936_6682")); 
     data.put("AUF_1087981634453_7022", Arrays.asList("AUF_1421268533080_1741", "AUF_1421268568003_1743")); 
     data.put("AUF_1421268533080_1741", Arrays.asList("AUF_1421268719761_1776")); 
     data.put("AUF_1421272434570_1781", Arrays.asList("AUF_1087981634453_7022")); 
     data.put("AUF_1422451819445_14260", Arrays.asList("AUF_1421268568003_1743")); 

     String[] rootKeys = { 
       "AUF_1060589919844_59496", 
       "AUF_1421272434570_1781", 
       "AUF_1422451819445_14260" 
     }; 

     // create the tree from the data. 
     TreeView<String> tree = createTreeView(
       data, 
       rootKeys 
     ); 

     // display the tree. 
     Scene scene = new Scene(tree); 
     stage.setScene(scene); 
     stage.show(); 
    } 

    /** 
    * Create a TreeView of a set of data 
    * given the data and identified roots within the data. 
    */ 
    private TreeView<String> createTreeView(
      TreeMap<String, List<String>> data, 
      String[] rootKeys 
    ) { 
     TreeItem<String> root = new TreeItem<>(); 
     Arrays.stream(rootKeys).sorted().forEach(
       rootKey -> 
         root.getChildren().add(
           createTreeItem(data, rootKey) 
         ) 
     ); 

     TreeView<String> tree = new TreeView<>(); 
     tree.setRoot(root); 
     tree.setShowRoot(false); 

     return tree; 
    } 

    /** 
    * Create a TreeItem for a TreeView from a set of data 
    * given the data and an identified root within the data. 
    */ 
    private TreeItem<String> createTreeItem(
      TreeMap<String, List<String>> data, 
      String rootKey 
    ) { 
     TreeItem<String> item = new TreeItem<>(); 
     item.setValue(rootKey); 
     item.setExpanded(true); 

     List<String> childData = data.get(rootKey); 
     if (childData != null) { 
      childData.stream() 
       .sorted() 
       .map(
         child -> createTreeItem(data, child) 
       ) 
       .collect(
         Collectors.toCollection(item::getChildren) 
       ); 
     } 

     return item; 
    } 

    public static void main(String[] args) { 
     Application.launch(args); 
    } 
} 
+0

真的很棒。虽然我以前不知道rooKeys。我试图找出找到它们的方法。 – Iman 2015-03-03 01:16:18