2013-06-27 17 views
0

我有一個Java對象數組到JTree的

Class Category 
private Category parent; 
private String name; 
private ArrayList<Category> categories; 
private DefaultMutableTreeNode node; 

ArrayList<Category> categories 

的ArrayList包含

[0]Categorie #1 
    parent = null 
    name = asdasd 
    ArrayList<Category> categories 
     [0]Categorie #2 
      parent = #1 
      name = asdasddsa 
      ArrayList<Category> categories 
       [0]Categories #4 
        parent = #2 
        name = asdasdasd 
        ArrayList<Category> categories = null 
     [1]Categorie #3 
      parent = #1 
      name = asdasdasdasdasd 
      ArrayList<Category> categories = null 

,我想創建一個JTree指出的ArrayList。 我嘗試了一個函數,使用它自己,直到類別ArrayList爲空,但 與此方法我不能有超過1個類別在父類。

我創建了這些函數,但它們不起作用。

public void generateNodes(Category category,DefaultMutableTreeNode root){ 
    ArrayList<Use> usages = category.getUsages(); 
    for(Use use: usages){ 
     category.getNode().add(use.getNode()); 
    } 
    if(!category.getCategories().isEmpty()){ 
     root.add(category.getNode()); 

     for(Category cat: category.getCategories()){ 
      generateNodes(cat, category.getNode()); 
     } 

    }else{ 
     root.add(category.getNode()); 
    } 

} 

回答

1

你只需要創建一個遞歸方法。每遇到一個類別,創建一個DefaultMutableTreeNode,然後將這些屬性添加爲子節點。然後用包含的Cateogories遞歸調用方法。

如果你想有一個以上的類別爲根的父母,你應該做一個「假」根節點,然後調用此JTree的上:

setRootVisible(假);

它仍然是一棵樹,但它看起來很多。這是你的意思嗎?

你的代碼應該是這個樣子:

public void generateNodes(Category categories,DefaultMutableTreeNode root){ 
     ArrayList<Use> usages = categ.getUsages(); 
     for(Use use: usages){ 
      categ.getNode().add(use.getNode()); 
     } 
     if(!categ.getCategories().isEmpty()){ 
      root.add(categ.getNode()); 

      for(Category cat: categ.getCategories(){ 
       generateNodes(categ, root); 
      } 

     }else{ 
      root.add(categ.getNode()); 
     } 

} 
+0

我加入,如果你想看看他們 – ilikewaffles

+0

你需要根傳遞到第二個方法以及我創建的功能爲:private void generateNodes (ArrayList categories,root) –

+0

根需要進入第二個消息,以便它可以獲得在遞歸方法 –