0

我有一个 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(); @代码的顶部,但它没有删除任何内容。我应该怎么办?

4

3 回答 3

6

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

removeAllChildren()方法删除了孩子,但它不会触发任何事件并且model.insertNodeInto()会触发插入事件。因此,JTree 会看到正在添加的节点,但永远不会看到正在删除的节点。

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

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

于 2011-05-09T20:24:48.057 回答
1

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

于 2011-04-11T16:18:32.570 回答
0

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

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

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

于 2014-01-21T13:30:52.313 回答