![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| Up |
|
|||
|
Unregistered |
Проблема в следующем.
Запоминаем путь к ноду sel_row=jTree1.getSelectionPath(); затем при необходимости возвращаемся к нему jTree1.setSelectionPath(sel_row); Все хорошо.. возвращаемся к ноду, если он скрыт, то дерево открывается с выделением данного нода. Но дерево строится по данным из БД, поэтому приходится полностью перерисовывать дерево. В этом случае при jTree1.setSelectionPath(sel_row); данный нод выделяется (можно увидеть только программно), но дерево не переходит к нему (не раскрывается в нужном месте) При перепостроении дерева данный путь (запоминаемый) не меняется. Как возможно решить данную проблему? Спасибо. |
|||
|
||||
| AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: 10 Всего: 118 |
Думаю, что надо искать нужный узел так:
1. Сами объекты дерева должны иметь некий уникальный ID 2. Запомнинать этот ID при перемещении на узел. 3. После перестроения дерева рекурсивно обегая дерево находить нужный объект и делать его видимым. А твой вариант не сработает - там же ссылки и ищет он по старой ссылке, которой после перестройки дерева уже, увы, нет. |
|||
|
||||
| Up |
|
|||
|
Unregistered |
AntonSaburov
Спасибо, так и буду делать. |
|||
|
||||
| AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: 10 Всего: 118 |
Да не за что. Мы всегда рады, когда к нам приходят новые люди. Так что если будет желание и возможность - региструйтесь и становитесь нашим полноправным участником. Будем рады. У нас тут теплая компания |
|||
|
||||
| Upir |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 13.9.2004 Репутация: нет Всего: нет |
Уже так и сделал )
|
|||
|
||||
| Foo |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 164 Регистрация: 20.10.2006 Репутация: 2 Всего: 3 |
возникла и у меня такая проблема, вот так примерно решил:
но возникла проблема другого рода. У меня дерево находится в левой части SplitPane и я после того как обновляю дерево делаю SplitPane.setLEftComponent(myTree); и потом вызываю setSelectedNodeByDTOId нод выделяется, но выделения не видно, а становится его видно только когда переключаюсь на другое приложение и обратно... как тут быть? или если ставлю тут tree.setSelectionPath(new TreePath(path.toArray())); брекпоинт, то когда с брекпоинта возвращаюсьв приложение выделение тоже видно. --------------------
qip |
|||
|
||||
| Foo |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 164 Регистрация: 20.10.2006 Репутация: 2 Всего: 3 |
под дебагом после строки tree.setSelectionPath(new TreePath(path.toArray()));
вызываю tree.getSelectionModel().getSelectionPath().getLastPathComponent() возвращает правильный элемент дерева, но выдление не отображается .... --------------------
qip |
|||
|
||||
| Foo |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 164 Регистрация: 20.10.2006 Репутация: 2 Всего: 3 |
вобщем не нашол другого способа как написать свой Renderer и в нем рисовать Border в случае если id шники совпадают...
Добавлено @ 19:02 кстати может кто знает, когда я делаю для JTree свой рендерер, который представляет из себя например JPanel и сделаю эту панель высокой, тоона обрезается сверху и снизу до определенного минимального размера, как сделать стандартную высоту элементов в JTree выше? --------------------
qip |
|||
|
||||
| Foo |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 164 Регистрация: 20.10.2006 Репутация: 2 Всего: 3 |
нужно вызвать tree.setRowHeight(0); - тогда высота буде зависеть только от размеров рендера, или tree.setRowHeight(const); - чтобы задать ее одинаковой для всех нодов.
Хотя если я делал tree.setRowHeight(const); и const - больше 30, то у JSplitPane вертикальный скрол улетат неизвестно куда... --------------------
qip |
|||
|
||||
| Scarlett |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 14.12.2006 Репутация: нет Всего: 1 |
извини,
может я не понимаю полностью твою проблему. но не легче ли было бы тебе создать класс, имплементирующий TreeModel и определить в нем метод, который находит путь к твоему узлу от корня. при этом у тебя же всегда есть ссылка на родителя, поэтому построить путь будет легко и без рекурсии а потом делаешь в модели:
и у тебя сразу выделится твой узел и что значит
|
||||
|
|||||
| Foo |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 164 Регистрация: 20.10.2006 Репутация: 2 Всего: 3 |
значит не прорисовывается рамка вокруг него. Это как то связано с рендером, потомучто если я рендер свой не юзаю то все нормально выделяется...
--------------------
qip |
|||
|
||||
| Hroft |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 310 Регистрация: 20.10.2003 Где: Москва Репутация: нет Всего: 3 |
А разве tree.updateUI() не поможет? Раз при альт-табе оно перерисовывается, то дело просто в перерисовке. Я не особо разбираюсь, но мне кажется так.
|
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |