昨天在这问的一个clone树的问题,自己写了个递归代码,不行,子节点还是没有。
初学者,代码写的比较糟糕,还请朋友们多指点。
void copyTree(DefaultMutableTreeNode oldNode,DefaultMutableTreeNode newNode)
{
   if(oldNode!=null)
   {
     newNode=new DefaultMutableTreeNode();
     newNode.setAllowsChildren(true);
     for(int i=0;i<oldNode.getChildCount();i++)
     {
       DefaultMutableTreeNode node=(DefaultMutableTreeNode) oldNode.getChildAt(i);
       newNode.add((DefaultMutableTreeNode)node.clone());
       //System.out.println("节点="+node.toString());
       copyTree( (DefaultMutableTreeNode) (oldNode.getChildAt(i)),
                (DefaultMutableTreeNode)( newNode.getChildAt(i)));      
     }  
   }
   if(oldNode==null)
   {
     int k=((oldNode.getParent()).getParent()).getIndex(oldNode.getParent());
     oldNode=(DefaultMutableTreeNode)(((oldNode.getParent()).getParent()).getChildAt(k+1));
   }
 
}
打印输出了全部的节点,但新生成的树只有三个父节点,why?

解决方案 »

  1.   

    newNode=new DefaultMutableTreeNode();你为什么每次都new一个呢?
    从旧的根节点开始, newRoot = oldRoot.clone();
    之后递归,copyTree(oldRoot, newRoot)
    if (oldRoot != null)
    {
        for (.....)
       ....
    }
      

  2.   

    ^_^ 终于弄出来了void copyTree(DefaultMutableTreeNode oldNode,DefaultMutableTreeNode newNode)
    {
      newNode.setAllowsChildren(true);
      if (oldNode != null) {
        for (int i = 0; i < oldNode.getChildCount(); ++i) {
          try {
           DefaultMutableTreeNode node=(DefaultMutableTreeNode) oldNode.getChildAt(i);
           newNode.add((DefaultMutableTreeNode)node.clone());
          copyTree( (DefaultMutableTreeNode) (oldNode.getChildAt(i)),
                     (DefaultMutableTreeNode) (newNode.getChildAt(i)));
          }
          catch (Exception e) {
            e.printStackTrace();
          }
        }
      }
    }