2013-07-12 3 views
1

Я пытаюсь создать JTree для отображения в моем приложении, которое отобразит внутреннюю структуру данных моего приложения. Я использую HashTable для инициализации всех моих объектов, которые используют каждый индекс объектов, который вы можете получить с помощью getIndex(). Я пытаюсь создать JTree, используя только имена каждого объекта, который будет отображаться.Создание JTree с использованием HashMap

Я не могу точно определить, как получить правильные добавления узлов. Я создаю новый узел, но я не могу ссылаться на него как на родительский узел.

Здесь я создаю мой 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

Для получения более полной помощи, отправьте сообщение [SSCCE] (http://sscce.org/), краткое, выполнимое, компилируемое, с жесткокодированным значением для HashMap в локальной переменной – mKorbel

+0

См. Также [Q & A] (http: // stackoverflow.com/q/16072182/230513). – trashgod

+0

@mKorbel Я понял свою проблему и решил ее. Это была действительно проблема с тем, где я пытался создать экземпляр узлов, я думаю, что это был вопрос ООП, а затем вопрос JTree/HashMap. Я хотел бы изменить вопрос, чтобы лучше описать проблему, чтобы она могла лучше помочь другим, я просто не знаю, как ее изменить. Какие-либо предложения? –

ответ

2

Задумывалось об этом неправильно!

Вместо того, чтобы создавать JTree в методе, который создает все мои классы, является неправильным способом. Вы должны создать свой JTree, используя внутренние методы и конструкторы каждого объекта.

Здесь, в объекте «Пещера», я создаю корень узла. (Пещера получает построена первой и будет содержать 4 «Сторону» объекты в ArrayList)

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 

Затем при создании «объект» Я построить его и установить родительский узел в качестве корневого узла «treeRoot»:

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" 
} 

Урок: Когда дело доходит до него, где каждый узел место в моей иерархии объектов является атрибут объекта, которому он сам и должно быть описано/создано в рамках каждого соответствующего класса.

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