|
|
|
Вопрос по JTree и подгрузкой данных из базы
|
|||
|---|---|---|---|
|
#18+
Скажите пожалуйста, у меня есть дерево, данные в узлах не грузятся автоматически, они подгружаются тогда, когда пользователь нажимает на расскрытие узла. Т.е. перед каждым открытием узла я удаляю содержимое ноды, и после подгружаю значения. Но вот проблема, например пользователь открывал узел и дошел до какого-то глубокого уровня вложенности, потом закрыл родителя, открыл снова и ему опять приходится открывать заново всю эту цепочку. Как сделать так, чтобы при повторном открытии ноды, пользователю открывался весь тот путь, которые был уже открыт. Надеюсь я понятно объяснила :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2012, 16:03:08 |
|
||
|
Вопрос по JTree и подгрузкой данных из базы
|
|||
|---|---|---|---|
|
#18+
А зачем удалять ноды? Посмотрите исходники JTree методы TreeModelHandler.treeStructureChanged removeDescendantToggledPaths Они как раз удаляют информацию об открытых путях, когда удаляются ноды. Возможно нужно туда вписать желаемую логику, чтобы пути оставались. Либо ещё как-то самостоятельно контролировать поле JTree.expandedState ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2012, 16:18:49 |
|
||
|
Вопрос по JTree и подгрузкой данных из базы
|
|||
|---|---|---|---|
|
#18+
BlazkowiczА зачем удалять ноды? Посмотрите исходники JTree методы TreeModelHandler.treeStructureChanged removeDescendantToggledPaths Они как раз удаляют информацию об открытых путях, когда удаляются ноды. Возможно нужно туда вписать желаемую логику, чтобы пути оставались. Либо ещё как-то самостоятельно контролировать поле JTree.expandedState если не удалять, то при очередном открытии в выделенный узел добавляются дублирующиеся записи, и так происходит каждый раз при очередном закрытии и открытии узла ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2012, 16:58:13 |
|
||
|
Вопрос по JTree и подгрузкой данных из базы
|
|||
|---|---|---|---|
|
#18+
JulTесли не удалять, то при очередном открытии в выделенный узел добавляются дублирующиеся записи, и так происходит каждый раз при очередном закрытии и открытии узла А не добавлять узел, если он уже есть? Не вариант? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2012, 17:00:04 |
|
||
|
Вопрос по JTree и подгрузкой данных из базы
|
|||
|---|---|---|---|
|
#18+
BlazkowiczJulTесли не удалять, то при очередном открытии в выделенный узел добавляются дублирующиеся записи, и так происходит каждый раз при очередном закрытии и открытии узла А не добавлять узел, если он уже есть? Не вариант? вариант конечно, но как это реализовать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2012, 17:06:41 |
|
||
|
Вопрос по JTree и подгрузкой данных из базы
|
|||
|---|---|---|---|
|
#18+
JulT , видел как-то реализацию подобной логики. Там расширяли DefaultMutableTreeNode и добавляли флаг, а-ля childrenLoaded. Далее логика проста: на дерево вешался слушатель TreeExpansionListener . При обработке события раскрытия ноды по данному флагу определялось, были ли ранее загружены дочерние ноды. Если нет, они подгружались и устанавливался флаг, в противном случае происходило просто раскрытие ноды. Насколько мне помнится, селекшн-стейт дочерних нод сохранялся. На крайний случай, в гугле можно найти примеры сохранения этого состояния. Единственный минус такого подхода - необходимо предусмотреть reload дочерних элементов для нод, у которых данный флаг уже был установлен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2012, 23:02:47 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=37667583&tid=2132532]: |
0ms |
get settings: |
16ms |
get forum list: |
21ms |
check forum access: |
6ms |
check topic access: |
6ms |
track hit: |
47ms |
get topic data: |
18ms |
get forum data: |
4ms |
get page messages: |
73ms |
get tp. blocked users: |
2ms |
| others: | 333ms |
| total: | 526ms |

| 0 / 0 |
