gpt4 book ai didi

java - 使用 HashMap 创建 JTree

转载 作者:行者123 更新时间:2023-11-30 04:18:55 25 4
gpt4 key购买 nike

我正在尝试创建一个 JTree 以在我的应用程序中显示,它将显示我的应用程序的内部数据结构。我使用 HashTable 来初始化所有对象,这些对象使用可以使用 getIndex() 检索的每个对象索引。我正在尝试仅使用要显示的每个对象的名称来创建 JTree

我不知道如何正确添加节点。我创建了一个新节点,但无法将其引用为父节点。

这里我创建了我的 JTree 和根节点:

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

这里我创建一个代表 Party 对象的节点,该对象是根节点的新子节点:

        //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 索引表示的节点,然后我可以将该节点添加到树中,并显示正确的文本和父节点。正如你所看到的,我尝试这样做了好几次,但似乎没有什么真正坚持下来。

最佳答案

原来自己的想法都是错误的!

在实例化所有类的方法中而不是创建 JTree 是错误的方法。您应该使用每个对象的内部方法和构造函数来创建 JTree。

在“Cave”对象中,我创建了节点的根。 (洞穴首先被构建,并将在 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

然后,在创建“对象”时,我构造它并将父节点设置为根节点“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

最后,当我将宝藏和文物添加到属于持有它们的生物的 ArrayList 时,我将它们添加到它们各自的父节点。

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

经验教训:归根结底,对象层次结构中每个节点的位置都是对象本身的一个属性,并且应该在每个相应的类中进行描述/建立。

关于java - 使用 HashMap 创建 JTree,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17619168/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com