Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Удаление node из JTree, как делается? 
:(
    Опции темы
ShkVal
  Дата 16.11.2004, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 122
Регистрация: 10.11.2004

Репутация: 1
Всего: 1



Народ подскажите как удалить элемент дерева (DefaultMutableTreeNode) из дерева. Нашёл метод removeFromParent() у DefaultMutableTreeNode, но он почему-то не работает. Как удалить?
Или попробовать найти родителя и из него уже удалять? Или можно без родителя?
PM MAIL   Вверх
Domestic Cat
Дата 16.11.2004, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 13
Всего: 172



Код

                   TreePath path = tree.getSelectionPath();
                   if (path == null) return;
                   Node node = (Node)path.getLastPathComponent();
                   final TreeNode parent = node.getParent();
                   node.removeFromParent();                  
                   ((DefaultTreeModel)tree.getModel()).nodeStructureChanged(parent);



ПС. я туt код менял, т.к. скопировал со своего класса

Это сообщение отредактировал(а) Domestic Cat - 16.11.2004, 17:16


--------------------

PM   Вверх
ShkVal
Дата 16.11.2004, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 122
Регистрация: 10.11.2004

Репутация: 1
Всего: 1



Цитата(Domestic @ 16.11.2004, 17:04)
Код

                   TreePath path = tree.getSelectionPath();
                   if (path == null) return;
                   Node node = (Node)path.getLastPathComponent();
                   final TreeNode parent = node.getParent();
                   node.removeFromParent();                  
                   ((DefaultTreeModel)tree.getModel()).nodeStructureChanged(parent);



ПС. я туt код менял, т.к. скопировал со своего класса

что-то у меня не заработало. Вот мой код
Код

public void showContextMenu(JTree tree,MutableTreeNode treeNode,int x,int y) {
       JPopupMenu menu=new JPopupMenu();
       lastTreeNode=(DefaultMutableTreeNode)treeNode;
       lastTree=(XmlTree)tree;
       menu.add(new JMenuItem(new AbstractAction("Delete module") {
               public void actionPerformed(ActionEvent event) {
                   lastTreeNode.removeFromParent();
                   final TreeNode parent = lastTreeNode.getParent();
                   ((DefaultTreeModel)lastTree.getModel()).nodeStructureChanged(parent);
               }
           }));
       menu.show(appData.getFrame().getLeftPanel(), x, y);
   }


Т. е. тут через контекстное меню хочу удалить.
Само удаление происходит тут
Код

public void actionPerformed(ActionEvent event) {
                   lastTreeNode.removeFromParent();
                   final TreeNode parent = lastTreeNode.getParent();
                   ((DefaultTreeModel)lastTree.getModel()).nodeStructureChanged(parent);
               }
           }));



В общем почему-то не работает подскажите в чём ошибка.
PM MAIL   Вверх
ShkVal
Дата 16.11.2004, 19:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 122
Регистрация: 10.11.2004

Репутация: 1
Всего: 1



Цитата(ShkVal @ 16.11.2004, 18:40)
Цитата(Domestic @ 16.11.2004, 17:04)
Код

                   TreePath path = tree.getSelectionPath();
                   if (path == null) return;
                   Node node = (Node)path.getLastPathComponent();
                   final TreeNode parent = node.getParent();
                   node.removeFromParent();                  
                   ((DefaultTreeModel)tree.getModel()).nodeStructureChanged(parent);



ПС. я туt код менял, т.к. скопировал со своего класса

что-то у меня не заработало. Вот мой код
Код

public void showContextMenu(JTree tree,MutableTreeNode treeNode,int x,int y) {
       JPopupMenu menu=new JPopupMenu();
       lastTreeNode=(DefaultMutableTreeNode)treeNode;
       lastTree=(XmlTree)tree;
       menu.add(new JMenuItem(new AbstractAction("Delete module") {
               public void actionPerformed(ActionEvent event) {
                   lastTreeNode.removeFromParent();
                   final TreeNode parent = lastTreeNode.getParent();
                   ((DefaultTreeModel)lastTree.getModel()).nodeStructureChanged(parent);
               }
           }));
       menu.show(appData.getFrame().getLeftPanel(), x, y);
   }


Т. е. тут через контекстное меню хочу удалить.
Само удаление происходит тут
Код

public void actionPerformed(ActionEvent event) {
                   lastTreeNode.removeFromParent();
                   final TreeNode parent = lastTreeNode.getParent();
                   ((DefaultTreeModel)lastTree.getModel()).nodeStructureChanged(parent);
               }
           }));



В общем почему-то не работает подскажите в чём ошибка.

Спасибо FAQ.
Получилось таким образом
Код

public void actionPerformed(ActionEvent event) {
 //                  lastTreeNode.removeFromParent();
 //                  final TreeNode parent = lastTreeNode.getParent();
 //                  ((DefaultTreeModel)lastTree.getModel()).nodeStructureChanged(parent);
                   DefaultTreeModel model = (DefaultTreeModel)lastTree.getModel();
                   model.removeNodeFromParent(lastTreeNode);
               }

PM MAIL   Вверх
Domestic Cat
Дата 16.11.2004, 19:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 13
Всего: 172



Нужно было писать нe

Код

lastTreeNode.removeFromParent();
final TreeNode parent = lastTreeNode.getParent();
((DefaultTreeModel)lastTree.getModel()).nodeStructureChanged(parent);


а

Код

final TreeNode parent = lastTreeNode.getParent();
lastTreeNode.removeFromParent();
((DefaultTreeModel)lastTree.getModel()).nodeStructureChanged(parent);


Код взят иz рабочей программы, так что проблем тут быть нe может.


--------------------

PM   Вверх
ShkVal
Дата 16.11.2004, 19:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 122
Регистрация: 10.11.2004

Репутация: 1
Всего: 1



Цитата(Domestic @ 16.11.2004, 19:11)
Нужно было писать нe

Код

lastTreeNode.removeFromParent();
final TreeNode parent = lastTreeNode.getParent();
((DefaultTreeModel)lastTree.getModel()).nodeStructureChanged(parent);


а

Код

final TreeNode parent = lastTreeNode.getParent();
lastTreeNode.removeFromParent();
((DefaultTreeModel)lastTree.getModel()).nodeStructureChanged(parent);


Код взят иz рабочей программы, так что проблем тут быть нe может.

Вот объясни мне пожалуйста в чём разница. Что поменялось от замены строк местами?
PM MAIL   Вверх
Domestic Cat
Дата 16.11.2004, 19:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 13
Всего: 172



Если ты удаляешь ноду от парента, то после этого парента у нее нет.


--------------------

PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема »


 




[ Время генерации скрипта: 0.0725 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.