2016-05-14 10 views
0

TreeViewにHashMapからTreeItemを設定しようとしています。データの中には、特定のクライアントのプロジェクトを意味する属性「isProject」があります。これらのプロジェクトノードを上位クライアントノードに追加しようとしています...しかし、代わりにひどいフィードバックループを構築してください。特定のノード(TreeItem)を取得して別のノードを追加する方が良いでしょうか?またはこのコードを動作させる方法ですか?ありがとうございました!JavaFX内の既存のノードにTreeItemを検索して追加します。

@SuppressWarnings({ "rawtypes", "unchecked" }) 
private void showTimeRecords() { 
    ArrayList<TimeRecord> timeRecords = new ArrayList<>(); 
    ObservableList<PerformanceLogTableData> pflData = FXCollections.observableArrayList(); 
    TimeDataRecords rootValue = new TimeDataRecords("Client/Project", "", "", false, timeRecords, pflData); 

    YearMonth setYM = YearMonth.of(2016, currMonth); 
    root = new TreeItem<TimeDataRecords>(); 

    HashMap<String,TimeDataRecords> timeDataRecsMap = timeDataRecsBigMap.get(setYM); 

    for (HashMap.Entry<String, TimeDataRecords> entry : timeDataRecsMap.entrySet()) { 
     TreeItem<TimeDataRecords> node = new TreeItem<TimeDataRecords>(entry.getValue()); 

     if (entry.getValue().isProject()) { 
      for (int i = 0; i < root.getChildren().size(); i++) { 
       if(root.getChildren().get(i).getValue().getName().equals(entry.getValue().getName())){ 
       TreeItem<TimeDataRecords> tempNode = new TreeItem<TimeDataRecords>(root.getChildren().get(i).getValue()); 
       tempNode.getChildren().add(node); 
       root.getChildren().add(tempNode); 
       } 
      } 

     }else{    
      root.getChildren().add(node); 
      System.out.println(entry.getValue().getId() + " --- " + entry.getValue().getProject() + " --- " + entry.getValue().isProject()); 
     } 
    } 
    root.setValue(rootValue); 
    root.setExpanded(true); 
    treeView.setRoot(root); 
    treeView.setEditable(false); 
} 

答えて

0

まず、プロジェクトデータをLinkedListに先行させてください。

LinkedList<TreeItem<TimeDataRecords>> entrys = new LinkedList<>(); 

for(TimeDataRecords entry : timeDataRecsMap.values()){ 
    TreeItem<TimeDataRecords> node = new TreeItem<TimeDataRecords>(entry); 

    if(entry.isProject()) entrys.addFirst(node); 
    else entrys.addLast(node); 
} 

root.getChildren().addAll(entrys); 
関連する問題