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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Свернуть все дочерние ноды, Что-то никак немогу придумать как... 
V
    Опции темы
kaa
Дата 26.4.2008, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



В общем есть цель: при разворачивании узла все сестринские развернутые узлы в дереве должны автоматом сворачиваться.

Пытался реализовать это так:
Код

class ExpandHandler implements TreeExpansionListener{
    private SystemTree st;
    private TestObject temp;
    private TestObject temp1;
    private TreePath tp;
    
     public ExpandHandler(SystemTree param){
        this.st = param;
     }
     public void treeCollapsed(TreeExpansionEvent ev){
     }
     public void treeExpanded(TreeExpansionEvent ev){
         this.temp = (TestObject)ev.getSource();
         this.temp = (TestObject)temp.getParent();
         //При развертывании данной ноды сворачиваем все соседние ноды
         int count = temp.getChildCount();
         for(int c=0; c<count; c++){
             this.temp1 = (TestObject)this.temp.getChildAt(c);
             if(this.temp.compareTo(this.temp1)!=0){
                tr = new TreePath(temp1.getPath());
                this.st.collapsePath(tr);
             }
         }
     }
}


Но, так как temp1.getPath() выдает массив узлов, а не объект TreePath - соотвественно лезет ошибка.

Собственно вопрос: как тут быть? Может быть можно сворачивать узлы ка-то по другому? Ибо методов возвращающих TreePath для указано ноды я ненашёл :(
PM MAIL   Вверх
dorogoyIV
Дата 27.4.2008, 07:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

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



Код

import javax.swing.*;
import javax.swing.tree.*;
import javax.swing.event.*;

public class MyTree extends JTree
                    implements TreeExpansionListener
{
 public MyTree()
 {
  addTreeExpansionListener(this);
 }

 public void treeCollapsed(TreeExpansionEvent e){}
 public void treeExpanded(TreeExpansionEvent e)
 {
  DefaultTreeModel model = (DefaultTreeModel)getModel();
  int child_count = model.getChildCount(model.getRoot());

  TreePath [] paths = new TreePath [child_count];
  TreePath p = new TreePath(model.getRoot());

  for(int i=0; i < paths.length; i++)
  {
   Object o = model.getChild(model.getRoot(), i);
   paths [i] = p.pathByAddingChild(o);
  }

  for(int i=0; i < paths.length; i++)
  {
   if(!paths [i].equals(e.getPath()))
     collapsePath(paths [i]);
  }
 }

 public static void main(String [] args)
 {
  JFrame f = new JFrame();
  f.add(new JScrollPane(new MyTree()));

  f.setBounds(100, 100, 400, 300);
  f.setVisible(true);
  f.setDefaultCloseOperation(3);
 }
}

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


Опытный
**


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

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



dorogoyIV
Спасибо за пример - буду пробовать!

Добавлено через 13 минут и 30 секунд
А можно еще вопрос, почиму работа идет через модели, когда количество детей и сам объект детеныша можно получить и так?
PM MAIL   Вверх
dorogoyIV
Дата 27.4.2008, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

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



Цитата(kaa @  27.4.2008,  11:58 Найти цитируемый пост)
когда количество детей и сам объект детеныша можно получить и так?

так - это как?

ты имеешь ввиду 
Код
int row_count = tree.getRowCount()
?
это даст все открытые строки, в том числе листья. проще получить непосредственно детей главного родителя.

и метода получить "объект детеныша" у JTree я не нашел что то.
PM MAIL   Вверх
kaa
Дата 27.4.2008, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



dorogoyIV

tree.getChildAt

пмоему.


А дитенышей можно получить из объекта ноды, а не из дерева, это я ошибся да... 

Но это так лирика... Спасибо за совет!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0742 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


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

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