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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Управление деревом, как реализовать 
:(
    Опции темы
Hidrag
Дата 27.4.2007, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Появилась необходимость отображения данных в дереве.
Для отображения в дереве объектов я реализовал два класса, первый  наследовал от DefaultTreeCellRenderer для отрисовки элемента в зависимости от объекта и его свойств, второй класс модели - реализация интерфейса TreeModel. В нем реализовал все методы и добавил свои для добавления/удаления элементов.

Во время работы я наполняю модель данными, после чего вывожу дерево на контейнер (JPanel+JScrollPane) - данные есть и отображаются так как мне нужно.

Если я начинаю снова добавлять данные в модель они не отображаются(?), если меняются свойства объектов которые в модели - это так же не отображается, НО если я уберу с контейнера дерево и изменю свойства объектов (листьев) и сновы веведу дерево - то будут видны изменения, иногда корректно а иногда непонятно как... (?). Если убрать дерево из контейнера и затем добавить в модель дерева элементы - это не отобразится.

Что нужно еще дописать или реализовать, чтобы можно было динамично управлять отображением дерева, то есть добавлять элементы (листья), удалять, изменять их свойства и это все отображалось?


--------------------
user posted image
PM WWW ICQ   Вверх
cube
Дата 27.4.2007, 18:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Скинь код где создаешь дерево, работаешь с моделью и устанавливаешь рендерер
PM MAIL   Вверх
chief39
Дата 27.4.2007, 18:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


карманная тигра
***


Профиль
Группа: Участник Клуба
Сообщений: 1631
Регистрация: 20.5.2005
Где: Киев

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



Слу.. пару лет назад возился с такой же тряднью... неотрисовка, дорисовка при удалении/добавлении
рефреши и репейнты - побоку

Если не ошибаюсь, есть класс SwingUtilities или близ того. 
Вызываешь метод а-ля updateTree или refreshTree и передаёшь параметром своё дерево...
Добавил - попросил фрешнуть. 


--------------------
Люди - это свечи. Они либо горят, либо их - в жопу!(с)

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


Опытный
**


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

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



chief39, Точно, все оказалось просто  smile

Код

tree.updateUI();



Это сообщение отредактировал(а) Hidrag - 27.4.2007, 22:21


--------------------
user posted image
PM WWW ICQ   Вверх
Hidrag
Дата 28.4.2007, 20:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Метод updateUI() делает то что нужно, но как мне подсказали:
Цитата

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


Стал копаться дальше и сделал более правильно:

Код

    protected void fireTreeStructureChanged(Object oldRoot) {
        int len = treeModelListeners.size();
        TreeModelEvent e = new TreeModelEvent(this, new Object[] {oldRoot});
        for (TreeModelListener tml : treeModelListeners) {
            tml.treeStructureChanged(e);
        }
    }



Теперь у меня другая задча мне нужно получить ссылку на выбранный объект в дереве (интересуют только листья). Вот в Jlist есть классный метод
Код

list.getSelectedValue();


а вот как вернуть объект из дерева. В модели дерева есть метод
Код

Object getChild(Object parent, int index) 


но для его использования нужно еще и ссылку на родителя, а вот как не трогоя родителей, получить объект в листе?

Это сообщение отредактировал(а) Hidrag - 28.4.2007, 20:26


--------------------
user posted image
PM WWW ICQ   Вверх
Hidrag
Дата 29.4.2007, 20:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Может кто подскажет что добавить в модель чтобы по пути
Код

TreePath tp = tree.getSelectionPath();

Можно было бы вернуть элемент?


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

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

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


 




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


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

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