Есть дерево JTree. Для него использую модель DefaultTreeModel. Изначально в нем root = null.
Далее делаю treeModel.setRoot(rebuildRoot()). Т.е. создаю рута и кладу его в дерево.
Проблема в том, что дерево не обновляется. Приходится заново создавать дерево с обновленной моделью.
Вобщем мне нужно динамически обновлять все дерево. Гугл к сожалению не помог.
Здравствуйте, tipoc, Вы писали:
T>Всем привет!
T>Есть дерево JTree. Для него использую модель DefaultTreeModel. Изначально в нем root = null. T>Далее делаю treeModel.setRoot(rebuildRoot()). Т.е. создаю рута и кладу его в дерево. T>Проблема в том, что дерево не обновляется. Приходится заново создавать дерево с обновленной моделью.
T>Вобщем мне нужно динамически обновлять все дерево. Гугл к сожалению не помог.
T>Может кто с таким сталкивался?
Да, динамически обновлять все дерево необходимо для постраничной разбивки (при переходе с одной страницы на другую). Сейчас приходится создавать дерево заново, что совсем не есть гуд (не в плане оптимизации, а по другим соображениям).
Здравствуйте, tipoc, Вы писали:
T>Всем привет!
T>Есть дерево JTree. Для него использую модель DefaultTreeModel. Изначально в нем root = null. T>Далее делаю treeModel.setRoot(rebuildRoot()). Т.е. создаю рута и кладу его в дерево. T>Проблема в том, что дерево не обновляется. Приходится заново создавать дерево с обновленной моделью.
T>Вобщем мне нужно динамически обновлять все дерево. Гугл к сожалению не помог.
T>Может кто с таким сталкивался?
Покажи код. Со слов получается, что дерево и модель не знают друг о друге. Или неправильно используется модель.
Здравствуйте, xBlackCat, Вы писали:
BC>Здравствуйте, tipoc, Вы писали:
T>>Всем привет!
T>>Есть дерево JTree. Для него использую модель DefaultTreeModel. Изначально в нем root = null. T>>Далее делаю treeModel.setRoot(rebuildRoot()). Т.е. создаю рута и кладу его в дерево. T>>Проблема в том, что дерево не обновляется. Приходится заново создавать дерево с обновленной моделью.
T>>Вобщем мне нужно динамически обновлять все дерево. Гугл к сожалению не помог.
T>>Может кто с таким сталкивался?
BC>Покажи код. Со слов получается, что дерево и модель не знают друг о друге. Или неправильно используется модель.
Да по ходу у меня в коде проблема. Т.к. сделал отдельный сэмпл — все нормально работает.
А так в моей программе код размазан по нескольким методам. Вот привожу эти методы (в той последовательности, в которой они вызываются):
@Override
protected void initTreeModel() {
treeModel = new DefaultTreeModel(null);
}
public void createTree() {
if (isTreeEditable()) {
tree = new JTree(treeModel) {
@Override
public boolean isPathEditable(TreePath path) {
return isTreePathEditable(path);
}
};
} else {
tree = new JTree(treeModel);
}
}
А каким образом происходит изменение модели? Используются методы DefaultTreeModel#insertNodeInto(...), DefaultTreeModel#valueForPathChanged(...) и DefaultTreeModel#removeNodeFromParent(..)? Или изменения делаются на самих объектах? Если изменения делаются на самих объектах — то это в корне не правильно.
Здравствуйте, xBlackCat, Вы писали:
BC>А каким образом происходит изменение модели? Используются методы DefaultTreeModel#insertNodeInto(...), DefaultTreeModel#valueForPathChanged(...) и DefaultTreeModel#removeNodeFromParent(..)? Или изменения делаются на самих объектах? Если изменения делаются на самих объектах — то это в корне не правильно.
Я просто строю модель заново (в методе rebuildRoot()). Т.е. юзер находится например на 1 странице — я построил модель со 100 узлами, юзер перешел на 2 страницу — построил модель с другими 100 узлами и т.д.
Конкретно, изменение модели идет через метод setRoot. Моя цель — использовать одни и те же объекты JTree и DefaultTreeModel.
Описанные вами методы я не использую.
Здравствуйте, tipoc, Вы писали:
T>Я просто строю модель заново (в методе rebuildRoot()). Т.е. юзер находится например на 1 странице — я построил модель со 100 узлами, юзер перешел на 2 страницу — построил модель с другими 100 узлами и т.д. T>Конкретно, изменение модели идет через метод setRoot. Моя цель — использовать одни и те же объекты JTree и DefaultTreeModel. T>Описанные вами методы я не использую.
По приведённому коду, осталось только одно предположение — не возвращает ли rebuildRoot() во второй раз тоже самое, что и в первый?
Здравствуйте, xBlackCat, Вы писали:
BC>Здравствуйте, tipoc, Вы писали:
T>>Я просто строю модель заново (в методе rebuildRoot()). Т.е. юзер находится например на 1 странице — я построил модель со 100 узлами, юзер перешел на 2 страницу — построил модель с другими 100 узлами и т.д. T>>Конкретно, изменение модели идет через метод setRoot. Моя цель — использовать одни и те же объекты JTree и DefaultTreeModel. T>>Описанные вами методы я не использую.
BC>По приведённому коду, осталось только одно предположение — не возвращает ли rebuildRoot() во второй раз тоже самое, что и в первый?
Я до второго вызова rebuildRoot() пока не дохожу. Я захожу на первую страницу и уже на этом этапе дерево не показывается.
Здравствуйте, tipoc, Вы писали:
T>Я до второго вызова rebuildRoot() пока не дохожу. Я захожу на первую страницу и уже на этом этапе дерево не показывается.
Существенное замечание, которое должно было бы озвучено ранее.
Попробуй инициировать дерево ДО показа компонента. Или добавь вызов метода invalidate() на контейнере, ПОСЛЕ добавления в него дерева.
Здравствуйте, xBlackCat, Вы писали:
BC>Здравствуйте, tipoc, Вы писали:
T>>Я до второго вызова rebuildRoot() пока не дохожу. Я захожу на первую страницу и уже на этом этапе дерево не показывается.
BC>Существенное замечание, которое должно было бы озвучено ранее.
BC>Попробуй инициировать дерево ДО показа компонента. Или добавь вызов метода invalidate() на контейнере, ПОСЛЕ добавления в него дерева.
Все равно не помогает. Ладно, я уже остановился на том, что просто заново инициализирую дерево после вызова setRoot(). Так что тему можно считать закрытой.
Здравствуйте, tipoc, Вы писали:
T>Всем привет!
T>Есть дерево JTree. Для него использую модель DefaultTreeModel. Изначально в нем root = null. T>Далее делаю treeModel.setRoot(rebuildRoot()). Т.е. создаю рута и кладу его в дерево. T>Проблема в том, что дерево не обновляется. Приходится заново создавать дерево с обновленной моделью.
T>Вобщем мне нужно динамически обновлять все дерево. Гугл к сожалению не помог.
T>Может кто с таким сталкивался?
Может ты используешь какой то сторонний LookAndFeel, который криво обрабатывает ивенты от модели?