2013-10-16 2 views
0

Я работаю над проектом eclipse rcp, где мне нужно создать treeviewer из объекта TreeStructured Java. В настоящее время я жестко привязал объекты 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; 
     } 

общественного класса 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; 
} 

}

+3

"он не работает должным образом". Вам нужно будет предоставить более подробную информацию. Что не работает? – GriffeyDog

+0

@ Я уже упоминал, что работаю над проектом Eclipse RCP. JTree было бы невозможно. – user2886754

+0

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

ответ

0

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

0

Существует один метод в 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 
+0

Я реализовал с помощью провайдера contentprovider и label. NOw Мне нужно вызвать этот treeviewer в другом представлении. там я передам FileParent в treeviewer.setInput (foo.getChildren()) – user2886754

Смежные вопросы