删除Java JTree结构的节点子节点

删除Java JTree结构的节点子节点,java,swing,jtree,jtreetable,Java,Swing,Jtree,Jtreetable,我有一个ftp程序,每次展开时检索文件夹数据。它通过使用如下模型来实现这一点: 私有void filestreeexpanded(javax.swing.event.treeeexpansionevent evt){ 字符串路径=新字符串(“”) DefaultMutableTreeNode Selected=(DefaultMutableTreeNode)evt.getPath().getLastPathComponent(); 字符串[]pathArray=evt.getPath().to

我有一个ftp程序,每次展开时检索文件夹数据。它通过使用如下模型来实现这一点:


私有void filestreeexpanded(javax.swing.event.treeeexpansionevent evt){
字符串路径=新字符串(“”)

DefaultMutableTreeNode Selected=(DefaultMutableTreeNode)evt.getPath().getLastPathComponent();
字符串[]pathArray=evt.getPath().toString().replaceAll(“]”,“).split(“,”);
对于(int i=1;i
//我被选中了。除掉所有的孩子;没有成功 ftp.GoTo(路径)

ArrayList listDir=null; listDir=ftp.listDir(); ArrayList listFiles=null; listFiles=ftp.listFiles(); DefaultMutableTreeNode child=null,dir=null,X=null; //这将向树中添加文件 对于(int i=0;i0) model.insertNodeInto(子级,已选择,0); } //这将把目录添加到列表中 对于(int i=0;i0) model.insertNodeInto(dir,selected,0); } FilesTree.setModel(model);//这是我的Swing JTree }

问题是每次我展开JTree-it文件和文件夹的重复列表时。所以我尝试使用selected.removeAllChildren()@代码的顶部,但没有删除任何内容。我该怎么办?

调用
removeAllChildren()
将从节点中删除子节点。这里肯定还有其他事情在发生,那就是创建副本。确保您没有两次调用任何内容,并且正在刷新树的显示。

您的模型是正确的,但JTree是根据旧信息操作的

removeallchildrent()
方法删除子项,但它不会触发任何事件,而
model.insertNodeInto()
会触发插入事件。因此,JTree可以看到添加的节点,但从来没有看到删除的节点

添加新子级后,尝试调用
model.reload(selected)
以使
selected
下面的树无效


由于将重新加载分支,因此还可以将
model.insertNodeInto(dir,selected,0)
更改为
selected.insert(dir,0)
。这减少了发布事件的数量。

在我的应用程序中,我也遇到了同样的问题。为此,我只使用了以下代码


它会从我的Jtree中删除所有子节点。

我的代码每次都会添加目录侦听。因此,首先我必须清理节点,然后再次添加文件夹。

    private void FilesTreeTreeExpanded(javax.swing.event.TreeExpansionEvent evt) {
String path = new String("");

 DefaultMutableTreeNode chosen = (DefaultMutableTreeNode) evt.getPath().getLastPathComponent();

 String[] pathArray = evt.getPath().toString().replaceAll("]", "").split(",");
 for (int i = 1 ; i < pathArray.length ; i++) path += "/"+ pathArray[i].trim();
    JTree.removeAll();
    JTree.setModel(null);