gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 07:40:29 24 4
gpt4 key购买 nike

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


private void FilesTreeTreeExpanded(javax.swing.event.TreeExpansionEvent evt) {<br/>
String path = new String("");<p></p>

<pre><code> 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();
</code></pre>

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

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 时,它​​都会重复文件和文件夹列表。所以我尝试使用 chosen.removeAllChildren(); @ 代码顶部,但它没有删除任何内容。我该怎么办?

最佳答案

您的模型是正确的,但 JTree 正在旧信息上运行。

removeAllChildren()方法删除子项,但它不会触发任何事件,并且 model.insertNodeInto()是否触发插入事件。因此,JTree 可以看到节点被添加,但永远不会看到节点被删除。

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

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

关于java - 删除 Java JTree 结构的子节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5623919/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com