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

时间:2011-04-11 15:48:46

标签: java swing jtree jtreetable

我有一个ftp程序,每次扩展时都会检索文件夹数据。它通过使用这样的模型来实现:


    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();

// i were aded chosen.removeAllChildren(); without success ftp.GoTo(path);

ArrayList listDir = null; listDir = ftp.ListDir(); ArrayList listFiles = null; listFiles = ftp.ListFiles(); DefaultMutableTreeNode child = null , dir = null , X = null; //this will add files to tree for (int i = 0; i < listFiles.size(); i++) { child = new DefaultMutableTreeNode(listFiles.get(i)); if(listFiles.size() > 0) model.insertNodeInto(child, chosen, 0); } //this will add dirs to list for (int i = 0; i < listDir.size(); i++) { X = new DirBranch("در حال دریافت اطلاعات ...").node(); dir = new DirBranch( (String) listDir.get(i)).node(); dir.add(X); if(listDir.size() > 0) model.insertNodeInto(dir, chosen, 0); } FilesTree.setModel(model); //this is my Swing JTree }

问题是我每次扩展JTree时都会重复文件和文件夹列表。所以我试图使用 selected.removeAllChildren(); @代码的顶部,但它没有删除任何东西。我该怎么办?

3 个答案:

答案 0 :(得分:5)

您的模型是正确的,但JTree正在使用旧信息。

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

添加新子项后,请尝试拨打model.reload(chosen)以使chosen下面的树无效。

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

答案 1 :(得分:1)

调用removeAllChildren()将从节点中删除子节点。这里必然会发生其他事情,即创建重复项。确保你没有两次调用任何东西,并且你正在刷新树的显示。

答案 2 :(得分:0)

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

    JTree.removeAll();
    JTree.setModel(null);

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