Shi*_*TCo 0 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();
Run Code Online (Sandbox Code Playgroud)
//我被选中了.removeAllChildren(); 没有成功ftp.GoTo(路径);
ArrayList listDir = null; listDir = ftp.ListDir(); ArrayList listFiles = null; listFiles = ftp.ListFiles(); DefaultMutableTreeNode child = null,dir = null,X = null; //这会将文件添加到树中(int i = 0; i <listFiles.size(); i ++){child = new DefaultMutableTreeNode(listFiles.get(i)); if(listFiles.size()> 0)model.insertNodeInto(child,selected,0); } //这将为列表添加dirs(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,selected,0); } FilesTree.setModel(model); //这是我的Swing JTree}
问题是我每次扩展JTree时都会重复文件和文件夹列表.所以我试图使用selected.removeAllChildren(); @代码的顶部,但它没有删除任何东西.我该怎么办?
您的模型是正确的,但JTree正在使用旧信息.
该removeAllChildren()
方法删除了子节点,但它不会触发任何事件,并且model.insertNodeInto()
会触发插入事件.因此,JTree看到添加的节点,但从未看到删除的节点.
添加新子项后,尝试调用model.reload(chosen)
以使下面的树无效chosen
.
由于您将重新加载分支,您也可以更改model.insertNodeInto(dir, chosen,0)
为chosen.insert(dir,0)
.这减少了发布的事件数量.