2013-07-12 85 views
1

我正在嘗試創建一個JTree以顯示在我的應用程序中,該應用程序將顯示我的應用程序的內部數據結構。我使用HashTable初始化利用每個對象索引的所有對象,您可以使用getIndex()檢索每個對象索引。我試圖創建一個JTree只使用每個對象的名稱來顯示使用HashMap創建JTree

我無法弄清楚如何獲得正確添加節點。我創建了一個新節點,但我不能將其作爲父節點引用。

這裏創建我的JTree和根節點:

JTree           tree; 
    DefaultMutableTreeNode       treeRoot = new DefaultMutableTreeNode("Cave"); 
    tree           = new JTree(treeRoot); 

在這裏,我創建代表締約方對象是根節點的一個新的子節點:

 //DefaultMutableTreeNode newParty.getIndex(); //!Does not work 
     //DefaultMutableTreeNode newParty.getIndex() = new DefaultMutableTreeNode(newParty.getName() , treeRoot); //does not work 
     addNode(newParty.getName(), treeRoot); 

貝婁是ADDNODE方法:

static DefaultMutableTreeNode addNode (String Asset, DefaultMutableTreeNode parent){ 
    DefaultMutableTreeNode newNode = new DefaultMutableTreeNode(Asset); 
    parent.add(newNode); 
    return newNode; 
} 

在這裏,我嘗試添加一個生物節點,它是特定聚會節點的子節點:

findParty =    (newCreature.getParty());// == index of parent Node in HashMap 
        if (findParty == 0) { 
         SorcerersCave.theCave.addCreature(newCreature); 
         addNode (newCreature.getName(), treeRoot); 
        }else { 
         ((Party)gameAssets.get(findParty)).addMember(newCreature); 
         gameAssets.put( newCreature .getIndex(), newCreature); 
         addNode (newCreature.getName(), ((Party)gameAssets.get(findParty).getName())); 

理想我想創建每個對象INT指數所代表的節點,那麼我可以說節點添加到樹正確的文本顯示和家長。正如你所看到的,我嘗試多次這樣做,但似乎沒有什麼真正堅持。

+1

爲了更好地爲您提供幫助,請在本地變量 – mKorbel

+0

中發佈[SSCCE](http://sscce.org/),簡短,可運行,可編譯,並具有HashMap的hardocoded值。另請參閱本[問答](http:// stackoverflow.com/q/16072182/230513)。 – trashgod

+0

@mKorbel我想出了我的問題並解決了它。在我試圖實例化節點的地方真的是一個問題,我想這更像是一個OOP問題,然後是一個JTree/HashMap問題。我想改變這個問題來更好地描述問題,以便更好地幫助他人,我只是不確定要改變的問題。有什麼建議麼? –

回答

2

想到這一切都是錯的!

而不是在實例化所有類的方法中創建JTree是錯誤的方法。你應該使用每個對象的內部方法和構造函數來創建你的JTree。

這裏在「洞穴」對象中,我創建了節點的根。 (洞穴被構造第一和將包含在一個ArrayList 4「方」的對象)創建時

class Cave { 
    public ArrayList<Party>     parties = new ArrayList <Party>(); 
    ... 
    public JTree        theTree; 
    public DefaultMutableTreeNode    treeRoot = new DefaultMutableTreeNode("Cave"); 
    ... 

    public Cave(){//Constructs Cave Object 
     theTree           = new JTree(treeRoot); 
    } 
}//End Cave 

那麼「對象」我構造並設置爲根節點「樹根」父節點:

class Party extends Assets implements SearchableByName { 
    ArrayList <Creature>     members = new ArrayList <Creature>(); 
    DefaultMutableTreeNode     pNode; 
    public void addMember (Creature newMember) { 
    members.add (newMember); 
     newMember.cNode = addNode(newMember.getName(), this.pNode); 
     newMember.tNode = addNode("Treasures", newMember.cNode);//Each Creature hold Treasures 
     newMember.aNode = addNode("Artifacts", newMember.cNode);//Each Creature holds Artifacts 
    } 
    public Party (String[] x){//Party Consstructor 
     index =        Integer.parseInt(x[ 0 ]); 
     name =        x[ 1 ]; 
     pNode =        addNode(this.getName(), SorcerersCave.theCave.treeRoot);//Creates new Parent node with treeNode as its parent 
    } 
}//End Party 

最後,我將寶藏和工件添加到它們各自的父節點,當我將它們添加到屬於持有它們的生物的ArrayLists時。

public void addItem (Treasure newItem) { 
    inventory.add (newItem); 
    addNode (newItem.getType(), tNode);//Add Treasure parent Node labeled "Treasures" 
} 
public void addArtifact (Artifact newItem) { 
    artifacts.add (newItem); 
    addNode (newItem.getName(), aNode);//Add Artifact Node to parent Node labeled "Artifacts" 
} 

經驗教訓: 當它歸結爲它在哪裏我的對象層次結構的每個節點的地方是它的對象自身的屬性,並應說明/每個相應的類內建立。