我有一组命令行应用程序的节点,并希望在它上面放置一个GUI。我想直观地显示树,并使用JTree
。我编写了自己的树模型来实现TreeModel
接口,并按预期呈现树。
但现在我希望能够插入或删除节点。目前我只是在执行插入或删除操作时重绘树,这是一个非常糟糕的解决方案,特别是如果有数千个节点。
DefaultTreeModel
根据需要处理所有插入和删除以及树更新。我必须弄清楚它对我自己的模型是如何起作用的。
使用自定义树模型的唯一原因是我可以使用现有节点对象。这个理由“足够好”来实现自定义模型,还是应该寻找一种方法来使用默认的可变树节点对象?
答案 0 :(得分:3)
如How to Use Trees: Creating a Data Model所述,“TreeModel
接口接受任何类型的对象作为树节点。”您的自定义TreeModel
可以有效地反映您的“预先存在的分层数据结构。”
作为具体示例,请查看FileTreeModel
,引用here和here。唯一缺少的是TreeModelListener
管道,其说明可在EventListenerList
API中找到。
附录:关于渲染效率,JTree
使用flyweight pattern仅渲染可见节点。在TreeModelEvent
中触发相应的TreeModel
将允许列表树对模型中的更改做出反应。 DefaultTreeModel
是一个有用的指南。