我有一个自定义的 DefaultMutableTreeNode 类,旨在支持多种类型的数据属性之间的稳健连接(对我而言,这些属性可以是字符串、用户定义的标签或时间戳)。
当我聚合数据时,我想为用户提供我们目前看到的存储数据的实时预览。出于效率原因,我只想保留一个特定属性的副本,它可能与其他属性有很多联系。
示例:用户定义的标签“LOL”出现在五个不同的时间(由 TimeStamps 表示)。所以我的 JTree(显示此信息的类)将有五个父节点(每次出现该标记时一个)。这些父节点应该共享为“LOL”标签定义的 DefaultMutableTreeNode 的一个实例。
不幸的是,使用 add(MutableTreeNode newChild) 从当前父节点所在的位置移除 newChild。这真的太糟糕了,因为我希望所有父节点都具有相同的子节点。
这是一张做错了的照片(柯蒂斯是作者,他应该出现在所有的节目中):
如何使用 Java 轻松完成此操作?
更新
我一直在查看 DefaultMutableTreeNode.add() 的代码......我很惊讶它的工作方式(评论是我的):
public void add(MutableTreeNode child)
{
if (! allowsChildren)
throw new IllegalStateException();
if (child == null)
throw new IllegalArgumentException();
if (isNodeAncestor(child))
throw new IllegalArgumentException("Cannot add ancestor node.");
// one of these two lines contains the magic that prevents a single "pointer" from being
// a child within MANY DefaultMutableTreeNode Vector<MutableTreeNode> children arrays...
children.add(child); // just adds a pointer to the child to the Vector array?
child.setParent(this); // this just sets the parent for this particular instance
}
最佳答案
如果您想要轻松,您可能应该放弃共享实际的 TreeNodes 本身。整个模型建立在每个节点只有一个父节点的假设之上。相反,我会专注于设计您的自定义 TreeNode,以便多个节点都可以从同一位置读取它们的数据,从而使它们保持同步。
关于java - 在 JTree 中的 parent 之间共享 child ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3849530/