我有一组用于命令行应用程序的节点,我想在其上放置一个 GUI。我想直观地显示树并使用 JTree
。我已经编写了自己的树模型,它实现了 TreeModel
接口(interface),并且树按预期呈现。
但现在我希望能够插入或删除节点。目前,每当我执行插入或删除操作时,我只是重新绘制树,这是一个糟糕的解决方案,尤其是在有数千个节点的情况下。
DefaultTreeModel
根据需要处理所有的插入和删除以及树更新。我必须弄清楚它如何适用于我自己的模型。
使用自定义树模型的唯一原因是我可以使用现有的节点对象。这个理由“足够好”来实现自定义模型,还是我应该寻找一种方法来使用默认的可变树节点对象?
最佳答案
如 How to Use Trees: Creating a Data Model 中所述, “TreeModel
接口(interface)接受任何类型的对象作为树节点。”您的自定义 TreeModel
可以有效地反射(reflect)您的“预先存在的分层数据结构”。
作为具体示例,请查看 FileTreeModel
, 引用 here和 here .唯一缺少的是 TreeModelListener
管道,其说明可在 EventListenerList
中找到API。
附录:关于渲染效率,JTree
使用 flyweight pattern只渲染可见节点。在您的 TreeModel
中触发适当的 TreeModelEvent
将允许列表树对模型中的更改使用react。 DefaultTreeModel
是一个有用的指南。
关于java - 在插入/删除节点和更新树时在自定义树模型或默认树模型之间进行选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17305251/