在插入/删除节点和更新树时,在自定义树模型或默认树模型之间进行选择

时间:2013-06-25 18:49:27

标签: java swing jtree

我有一组命令行应用程序的节点,并希望在它上面放置一个GUI。我想直观地显示树,并使用JTree。我编写了自己的树模型来实现TreeModel接口,并按预期呈现树。

但现在我希望能够插入或删除节点。目前我只是在执行插入或删除操作时重绘树,这是一个非常糟糕的解决方案,特别是如果有数千个节点。

DefaultTreeModel根据需要处理所有插入和删除以及树更新。我必须弄清楚它对我自己的模型是如何起作用的。

使用自定义树模型的唯一原因是我可以使用现有节点对象。这个理由“足够好”来实现自定义模型,还是应该寻找一种方法来使用默认的可变树节点对象?

1 个答案:

答案 0 :(得分:3)

How to Use Trees: Creating a Data Model所述,“TreeModel接口接受任何类型的对象作为树节点。”您的自定义TreeModel可以有效地反映您的“预先存在的分层数据结构。”

作为具体示例,请查看FileTreeModel,引用herehere。唯一缺少的是TreeModelListener管道,其说明可在EventListenerList API中找到。

附录:关于渲染效率,JTree使用flyweight pattern仅渲染可见节点。在TreeModelEvent中触发相应的TreeModel将允许列表树对模型中的更改做出反应。 DefaultTreeModel是一个有用的指南。