/ / Busque y agregue TreeItem a un nodo existente en JavaFX - java, javafx, treeview

Encuentre y agregue TreeItem a un nodo existente en JavaFX - java, javafx, treeview

Estoy tratando de poblar mi TreeView conTreeItems, desde un HashMap. Algunos de los datos llevan el atributo "isProject", que significa que es el proyecto de un determinado Cliente. Estoy tratando de agregar estos nodos del Proyecto a los nodos del Cliente superior ... Pero, en cambio, cree un terrible ciclo de retroalimentación. Hay una mejor manera de obtener un nodo específico (TreeItem) y agregarle otro? ¿O una forma de hacer que este código funcione? ¡Gracias!

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

Respuestas

0 para la respuesta № 1

Intente anteponer los datos del proyecto en una lista enlazada primero.

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