/ / Знайдіть і додайте TreeItem до існуючого вузла JavaFX - java, javafx, viewview

Знайдіть і додайте TreeItem до існуючого вузла в JavaFX - java, javafx, treeview

Я намагаюся заповнити свій TreeViewTreeItems, від HashMap. Деякі дані несуть атрибут "isProject", це означає, що це проект певного Клієнта. Я намагаюся додати ці вузли Project до вищих вузлів Клієнта ... Але замість цього побудувати жахливу петлю зворотного зв'язку. Чи є кращий спосіб отримати конкретний вузол (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 для відповіді № 1

Спробуйте попередньо попередньо подати дані про проект у 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);