JTree динамическая вставка узла - PullRequest
4 голосов
/ 30 января 2012

У меня есть список, заполненный повторяющимися записями.Я использую хеш для хранения каждой уникальной записи из этого списка.Каждый ключ будет затем указывать на объект типа 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 голосов
/ 02 августа 2012

Вы делаете ошибку здесь

// 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());
...