/ / Znajdź i dodaj TreeItem do istniejącego węzła w JavaFX - java, javafx, treeview

Znajdź i dodaj TreeItem do istniejącego węzła w JavaFX - java, javafx, treeview

Próbuję zapełnić mój TreeViewTreeItems, z HashMap. Niektóre dane mają atrybut „isProject”, co oznacza, że ​​jest to projekt określonego klienta. Próbuję dodać te węzły projektu do wyższych węzłów klienta ... Ale zamiast tego zbuduj okropną pętlę sprzężenia zwrotnego. Czy istnieje lepszy sposób uzyskać określony węzeł (TreeItem) i dodać do niego kolejny? Lub sposób, aby ten kod działał? Dziękujemy!

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

Odpowiedzi:

0 dla odpowiedzi № 1

Najpierw spróbuj dodać dane projektu do 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);