Удаление дочерних узлов узла структуры Java JTree

У меня есть программа 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();

// я был добавлен selected.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 0) model.insertNodeInto(child, selected, 0); } // это добавит dir в список для (int i = 0; i 0) model.insertNodeInto(dir, selected, 0); } FilesTree.setModel(model); // это мой Swing JTree }

проблема в том, что каждый раз, когда я расширяю JTree, он дублирует список файлов и папок. поэтому я попытался использовать selected.removeAllChildren(); @ верхняя часть кода, но она ничего не удаляла. что я должен делать?

3 ответа

Решение

Ваша модель верна, но JTree работает со старой информацией.

removeAllChildren() метод удаляет дочерние элементы, но он не запускает никаких событий и model.insertNodeInto() делает события вставки огня. Таким образом, JTree видит добавляемые узлы, но никогда не видит удаляемых узлов.

После добавления новых детей попробуйте позвонить model.reload(chosen) сделать недействительным дерево ниже chosen,

Поскольку вы будете перезагружать ветку, вы также можете изменить model.insertNodeInto(dir, chosen,0) в chosen.insert(dir,0), Это уменьшает количество опубликованных событий.

Призвание removeAllChildren() удалит детей из узла. Здесь должно быть что-то еще, что создает дубликаты. Убедитесь, что вы ничего не вызываете дважды и обновляете отображение дерева.

В моем приложении также я просто на самом деле та же проблема. Для этого я просто использовал следующий код.

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

Это удаляет все дочерние узлы из моего Jtree.

Другие вопросы по тегам