JTree动态节点插入

时间:2012-01-30 18:42:54

标签: swing jtree

我有一个填充了重复条目的列表。我使用哈希来存储此列表中的每个唯一条目。然后,每个键将指向DefaultMutableTreeNode类型的对象,该对象表示JTree节点。我的目标是让此节点指向列表中与父节点具有相同节点的所有条目。

我添加了这些父节点没有问题但是当添加子节点时(通过insertNodeInto),只显示父节点。代码片段如下;非常感谢您的建议/时间。

// an unsorted list of items
List<MyObject>list = hash.get(key);

// clause to check for size
if (list.size() > 0) {

    // iterate through each item in the list and fetch obj
    for (int i=0; i < list.size(); i++) {
        MyObject be = list.get(i);

        // if object is not in hash, add to hash and point obj to new node
        if (!hashParents.containsKey(be)) {
                DefaultMutableTreeNode parent = 
                    new DefaultMutableTreeNode(be.getSequence());

                // add the key and jtree node to hash
                hashParents.put(be, parent);    

                // insert node to tree, relead model        
                ((DefaultMutableTreeNode)(root)).insert(
                    new DefaultMutableTreeNode("parent node"), 
                    root.getChildCount());
                    ((DefaultTreeModel)(tree.getModel())).reload();
        }

        // now that a parent-node exists, create a child 
        DefaultMutableTreeNode child = new DefaultMutableTreeNode("child");

        // insert the new child to the parent (from the hash)
        ((DefaultTreeModel)(tree.getModel())).insertNodeInto(child, hashParents.get(be), 
            hashParents.get(be).getChildCount());

        // render the tree visible          
        ((DefaultTreeModel)(tree.getModel())).reload();
    }
}

1 个答案:

答案 0 :(得分:0)

你在这里搞错了

// insert node to tree, relead model        
((DefaultMutableTreeNode)(root)).insert(
   new DefaultMutableTreeNode("parent node"), 
   root.getChildCount());

您已在上面创建节点parent,但不要使用它。您在树中插入另一个节点,但您仍然在parent中插入子节点。这就是他们没有出现在树上的原因。

此代码片段类似于

// insert node to tree, relead model        
((DefaultMutableTreeNode)(root)).insert(
   parent, 
   root.getChildCount());