Удаление дочерних узлов узла в структуре Java JTree - PullRequest
0 голосов
/ 11 апреля 2011

У меня есть программа ftp, которая извлекает данные папок при каждом расширении.Это делается с помощью такой модели:


    private void FilesTreeTreeExpanded(javax.swing.event.TreeExpansionEvent evt) {<br>
        String path = new String("");</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();

// я был выбран 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 ]

5 голосов
/ 10 мая 2011

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

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

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

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

1 голос
/ 11 апреля 2011

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

0 голосов
/ 21 января 2014

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

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

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

...