Когда я впервые увидел javax.swing.tree.TreeModel
, я подумал, что написать все методы - довольно много работы. Затем я нашел DefaultTreeModel
и подумал, что его будет легко использовать для дерева файлов через шаблон адаптера. Таким образом, я начал писать адаптер и вроде не удалось. Мне нужно иметь доступ к соответствующему файлу с TreeNode
(что легко, поскольку это может быть переменная экземпляра), но мне нужен и другой способ. Это можно решить с помощью карты, но она потребляет довольно много памяти. Помогло переключение на WeakHashMap
.
Это сработало, но я столкнулся с некоторыми странными проблемами, когда дерево изменилось. Кроме того, все было очень медленно, так как File.list()
вызывали много раз. Существует несколько глупых методов, таких как getChildCount()
, getChild(Object parent, int index)
и getIndexOfChild(Object parent, Object child)
, и в моей простой реализации каждый вызов приводит к чтению каталога.
Все это было довольно много работы, и результат был ужасен. Конечно, я виноват, но не было ли это прямым следствием использования некорректной, слишком сложной модели?
Этого бы не произошло, если бы вместо этого был один метод, такой как List getChildren(Object)
. Может я все сделал не так, как правильно?
Наконец, я написал MyCachingTreeModel implements TreeModel
, используя адаптер на класс , что решило все проблемы. Но мне все еще интересно, как еще это можно было решить.
Обновление:
Вышесказанное может выглядеть как напыщенная речь, а не как правильный вопрос. Поэтому я попробую еще раз:
Как эффективно реализовать TreeModel для дерева файловой системы, чтобы он отображал текущее состояние каталогов?
Мое решение здесь не считается, так как я обошел всю модель. Более того, он слишком много кеширует и почти не замечает каких-либо изменений.