2012-01-30 3 views
4

У меня есть список, заполненный дублирующимися записями. Я использую хеш для хранения каждой уникальной записи из этого списка. Затем каждый ключ указывает на объект типа DefaultMutableTreeNode, который представляет узел JTree. Моя цель состоит в том, чтобы этот узел указывал на все записи из списка, которые имеют тот же самый узел, что и родительский.Вставка динамического узла 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(); 
    } 
} 
+0

что-то неправильно с уведомлением (в фрагменте кода выше, я бы заподозрить простой ванили root.insert, что не сопровождаемый nodeWasInserted). Кроме того, перезагрузка не требуется - после того, как уведомление будет исправлено :-) – kleopatra

ответ

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()); 
Смежные вопросы