【发布时间】:2011-02-04 17:35:56
【问题描述】:
当我第一次看到javax.swing.tree.TreeModel 时,我认为编写所有方法需要大量工作。然后我找到了DefaultTreeModel,并认为它可以通过适配器模式轻松用于文件树。所以我开始编写适配器并且有点失败。我需要能够访问给定TreeNode 的相应文件(这很容易,因为它可以是一个实例变量),但我也需要它。这可以使用 Map 解决,但它占用了大量内存。切换到 WeakHashMap 有帮助。
这很有效,但是当树发生变化时我遇到了一些奇怪的问题。此外,由于File.list() 被多次调用,这一切都非常缓慢。有多种愚蠢的方法,例如 getChildCount()、getChild(Object parent, int index) 和 getIndexOfChild(Object parent, Object child),在我的幼稚实现中,每个调用都会导致读取目录。
这一切都做了很多工作,结果很糟糕。当然,是我的错,但这不是使用有缺陷的过于复杂的模型的直接后果吗?
如果有像List getChildren(Object) 这样的单一方法,它就不会发生。也许我做错了,正确的方法是什么?
最后,我使用 per class 适配器编写了MyCachingTreeModel implements TreeModel,这一切都解决了。但我仍然很好奇它还能如何解决。
更新:
以上内容可能看起来像是一种咆哮,而不是一个正确的问题。所以我再试一次:
如何有效地为文件系统树实现 TreeModel,以便显示目录的当前状态?
我的解决方案在这里不算,因为我绕过了整个模型。此外,它缓存太多,几乎没有注意到任何变化。
【问题讨论】: