程序编译环境JBuilder2006 
代码中的jTree1是JBuilder里面的默认树 Java code 
 public void btnDelete_actionPerformed(ActionEvent e)
{
     TreePath path = jTree1.getSelectionPaths();
         jTree1.removeSelectionPath(path);
}
 
此代码是一个删除按钮的事件   用来删除节点 
其实这个题目一种方法我已经知道了   是利用   DefaultTreeModel   和   removeNodeFromParent();来进行删除工作 
但是我在考虑这个问题的时候   首先就想到两个方法   
1。找出我选择的节点 
2。删除它 
所以我在javax.swing.JTree类的方法中找到了2个这样的方法 
  TreePath   getSelectionPath()   
                    返回首选节点的路径。   
  void   removeSelectionPath(TreePath   path)   
                    从当前选择中移除指定路径标识的节点。   
很明显   满足我的要求   当下放进了我的删除按钮事件里面   (就是上面的代码) 
但是当我选择了某节点时   按下删除按钮时候   并没有完成删除()过程中也无任何错误异常   ) 
随后用System.out.println(path);进行测试发现确实输出我选择的节点的路径 总结   :   难道真的是API在欺骗我吗? 
确实使用了API指定的方法   但是确不能完成 
一个好像只要2个方法就能实现的功能   未必这么麻烦? 
很不理解。 

解决方案 »

  1.   

    removeSelectionPath是去选中的,不是删除节点的。如果要删除的话,要使用DefaultTreeModel中的removeNodeFromParent方法。
      

  2.   

        void       removeSelectionPath(TreePath       path)       
                                            从当前选择中移除指定路径标识的节点。API帮助是这么说的
    不理解2L所说的 请仔细一点好吗
      

  3.   

    JTree是基于mvc模式的,删除节点只有通过模型,TreeModel来进行
    removeSelectionPath意思是,你选中了某个或某几个节点来进行处理,但我处理时有个例外,不想处理path这个节点,那么就要将它取消选中,即从选中的集合中将其删除,这时可以用removeSelectionPath(path)来取消选中。也就是“ 从当前选择中移除指定路径标识的节点。”
      

  4.   

    lz可以操作JTree.getSelectionPath().DefaultMutableTreeNode son = (DefaultMutableTreeNode) tree.getSelectionPath().getLastPathComponent();
    DefaultMutableTreeNode dad = (DefaultMutableTreeNode) son.getParent();
    dad.remove(son);
    treeModel.nodeStructureChanged(dad);这样也可以达到ls几位说的效果.
      

  5.   

    treeModel.nodeStructureChanged(dad);
       一句才是关键啊,把树刷新了。