Как создать структурированный объект Java Tree

Я работаю над проектом eclipse rcp, где мне нужно создать treeviewer из объекта TreeStructured Java. В настоящее время я жестко привязал объекты Java к созданию структуры, и она работает нормально. Мне нужно создать метод, который вычисляет весь объект "Родители и дети" и формирует древовидную структуру. Это должен быть рекурсивный метод. Я написал рекурсивный метод для создания древовидного Java-объекта. Но это не работает должным образом. Я не знаю, где именно проблема. попросите вас помочь в этом. Пожалуйста, найдите код ниже.

private FileParent getInput() {

 FileParent root = new FileParent("Root");

 FileParent A = new FileParent("A");
 FileParent a1 = new FileParent("A1");
 FileObject a11 = new FileObject("A11");
 a1.addChild(a11);
 FileObject a2 = new FileObject("A2");
 A.addChild(a1);
 A.addChild(a2);


 FileParent b = new FileParent("B"); FileObject b1 = new
 FileObject("B1"); FileObject b2 = new FileObject("B2");
 b.addChild(b1); b.addChild(b2);

 root.addChild(A);
 // root.addChild(b);

 return root;

 }

Мой рекурсивный метод, который должен проходить через все объекты "Родители" и "Дети" и создает структурированный объект дерева.

FileParent root1 = new FileParent("Root");
 public FileParent getChildren(FileParent root) {

 if (!root.hasChildren()) {
 return root;
 }
 if (root != null && root.hasChildren()) {

 FileObject[] children = root.getChildren();// size two

 for (FileObject fileObject : children) { // 2 times

 // here children will be the folders
 if (fileObject instanceof FileParent) {
 FileParent folder = (FileParent) fileObject;
 // root1.setParent(folder.getParent());
 // if (root1.getParent() != null) {

 root1.addChild(folder);
 // }
 getChildren((FileParent) folder);
 } else {
 System.out.println("FileName: " + fileObject.getName());
 // root1.setParent(fileObject.getParent());
 // if (root1.getParent() != null) {

 root1.addChild(fileObject);
 // }

 }

 }

 }

 return root1;
 }

public class FileObject {

private String name;
 private FileParent parent;

 public FileObject(String name) {
 this.name = name;
 }

 public String getName() {
 return name;
 }

 public void setParent(FileParent parent) {
 this.parent = parent;
 }

 public FileParent getParent() {
 return parent;
 }

 public String toString() {
 return getName();
 }


}

Открытый класс FileParent расширяет FileObject {/** * */

private List<fileobject> children;

public FileParent(String name) {
 super(name);
 children = new ArrayList<fileobject>();
}

public void addChild(FileObject child) {
 // if (children.contains(child)) {
 children.add(child);
 child.setParent(this);
 // }
}

public void removeChild(FileObject child) {
 children.remove(child);
 child.setParent(null);
}

public FileObject[] getChildren() {
 return (FileObject[]) children.toArray(new FileObject[children.size()]);
}

public boolean hasChildren() {
 return children.size() > 0;
}
</fileobject></fileobject>

}

2 ответа

Существует один метод в treeviewer.setInput(Object obj). Если я передаю getInput() как параметр, он будет работать нормально. Но если я передам getChildren(), который является моим рекурсивным методом, он не работает.

Вы имеете в виду, что вы вызываете treeviewer.setInput(foo.getChildren())? Это определенно неправильно. Прочтите эту статью: http://www.vogella.com/articles/EclipseJFaceTree/article.html.

В принципе, вам необходимо: 1) реализовать ITreeContentProvider для создания древовидной структуры; 2) реализовать ILabelProvider для предоставления текста и изображений; 3) вызов

treeViewer.setContentProvider(yourContentProvider);
treeViewer.setLabelProvider(yourLabelProvider);
treeviewer.setInput(new Object()); // or anything for which your content provider returns correct roots


В Swing есть интерфейс TreeModel с реализацией по умолчанию. Предполагается, что он будет использоваться в JTree и, как правило, не написан наилучшим образом (например, без дженериков), но может выполнять эту работу.

licensed under cc by-sa 3.0 with attribution.