Я почти уверен, что это не имеет никакого отношения к самому Дереву. Вместо того, чтобы добавлять данные непосредственно в дерево, вы можете попробовать это:
- Разобрать данные XML в HierarchicalContainer
- Выполните итерацию по HierarchicalContainer с примером кода ниже и убедитесь, что он идентичен структуре вашего XML-файла
- Свяжите контейнер данных с деревом, вызвав Tree.setContainerDataSource (Container)
Пример кода для итерации через HierarchicalContainer:
void iterateContainer() {
for(Object rootItemId : myContainer.rootItemIds()) {
Item rootItem = myContainer.getItem(rootItemId);
System.out.println(rootItem.getItemProperty(myLabelProperty).getValue());
iterateChildren(rootItemId, 1);
}
}
void iterateChildren(Object parentItemId, int indent) {
for(Object childItemId : myContainer.getChildren(parentItemId)) {
Item childItem = myContainer.getItem(childItemId);
for(int i = 0; i < indent; i++) {
System.out.print(" ");
}
System.out.println(childItem.getItemProperty(myLabelProperty).getValue());
if(myContainer.hasChildren(childItemId)) {
iterateChildren(childItemId, indent+1);
}
}
}
Это всего лишь некоторый непроверенный код QnD, но это должно помочь вам перебрать контейнер.
edit: только что заметил, что мой ответ мог быть (частично) глупым решением, так как Tree уже использует HierarchicalContainer. Вы можете инициализировать myContainer HierarchicalContainer myContainer = (HierarchicalContainer) myTree.getContainerDataSource();
и использовать приведенный выше код.
edit2: И если структура не идентична, посмотрите, где она идет не так, и пусть отладчик сделает все остальное ..:)