DefaultMutableTreeNode node = (DefaultMutableTreeNode)path.getLastPathComponent();
DefaultTreeModel model = (DefaultTreeModel)tree.getModel();
model.removeNodeFromParent(node);被删除的节点还显示在tree中,遍历它的parent,已经没有了,咋办呢????

解决方案 »

  1.   

    DefaultMutableTreeNode node =(DefaultMutableTreeNode)path.getLastPathComponent();DefaultTreeModel model = (DefaultTreeModel)tree.getModel();DefaultMutableTreeNode parent = (DefaultMutableTreeNode)node.getParent();
    model.removeNodeFromParent(node);
    node.removeFromParent();
    int count = model.getChildCount(parent);
    System.out.println("parent: " + parent.getUserObject());Enumeration en = parent.children();
    while(en.hasMoreElements()) {
         DefaultMutableTreeNode child = (DefaultMutableTreeNode)en.nextElement();
                    System.out.println(child.getUserObject());
    }
      

  2.   

    我是在jtree 的 drag & drop 实现里遇到该问题的。 后来发现,如果用注释中的语句就能成功删除,用以下第一行的语句得到TreePath就有问题。 不知道为什么。TreePath path = (TreePath)t.getTransferData(this.flavor);//TreePath path = (TreePath)tree.getSelectionPath();=================== 完整代码如下==================
    public synchronized void drop(DropTargetDropEvent dtde) {
            // TODO Auto-generated method stub
            if(!this.isDropAcceptable(dtde)) {
                dtde.rejectDrop();
                return;
            }
            
            try {
                dtde.acceptDrop(dtde.getDropAction());
                
                DropTargetContext dtc = dtde.getDropTargetContext();
                JTree tree = (JTree)dtc.getComponent();
                
                Point pt = dtde.getLocation();
                TreePath newPath = tree.getClosestPathForLocation(pt.x, pt.y);
                DefaultMutableTreeNode newParent = (DefaultMutableTreeNode)newPath.getLastPathComponent();
                System.out.println(newParent.getUserObject());
                if(newParent.isLeaf()) {
                    dtde.rejectDrop();
                    return;
                }
                
                Transferable t = dtde.getTransferable();
                TreePath path = (TreePath)t.getTransferData(this.flavor);
                //TreePath path = (TreePath)tree.getSelectionPath();
                
                
                DefaultMutableTreeNode node = (DefaultMutableTreeNode)path.getLastPathComponent();
                
                //model.insertNodeInto(newNode, newParent, 0);
                DefaultMutableTreeNode parent = (DefaultMutableTreeNode)node.getParent();
                System.out.println("node: " + node.getUserObject());
                System.out.println("parent: " + parent.getUserObject());
                model.removeNodeFromParent(node);
            } catch (Exception e) {
                // TODO Auto-generated catch block
                System.out.println(e);
            }
            dtde.dropComplete(true);
            return;
        }
      

  3.   

    DefaultMutableTreeNode node = (DefaultMutableTreeNode)path.getLastPathComponent(); 
    DefaultTreeModel model = (DefaultTreeModel)tree.getModel(); 
    model.removeNodeFromParent(node);
    model.nodeChanged(TreeNode node)
      

  4.   

    DefaultMutableTreeNode node = (DefaultMutableTreeNode)path.getLastPathComponent(); 如果用DefaultTreeModel方法构造的树,当树节点增加、删除时候不需要刷新树增加:model.insertNodeInto(MutableTreeNode newChild, MutableTreeNode parent, int index)
    删除:model.removeNodeFromParent(node); 
      

  5.   

    sorry,写错了,我是这样实现的,你试一下,看看行不DefaultMutableTreeNode node = (DefaultMutableTreeNode path.getLastSelectedPathComponent(); 如果用DefaultTreeModel方法构造的树,当树节点增加、删除时候不需要刷新树 增加:model.insertNodeInto(MutableTreeNode newChild, MutableTreeNode parent, int index) 
    删除:model.removeNodeFromParent(node); 
      

  6.   

    repaint();
    //最好不要用upadateUI用insertNodeInto和removeNodeFromParent不需要刷新。