java - 在 JTree 中的 parent 之间共享 child

标签 java swing jtree

我有一个自定义的 DefaultMutableTreeNode 类,旨在支持多种类型的数据属性之间的稳健连接(对我而言,这些属性可以是字符串、用户定义的标签或时间戳)。

当我聚合数据时,我想为用户提供我们目前看到的存储数据的实时预览。出于效率原因,我只想保留一个特定属性的副本,它可能与其他属性有很多联系。

示例:用户定义的标签“LOL”出现在五个不同的时间(由 TimeStamps 表示)。所以我的 JTree(显示此信息的类)将有五个父节点(每次出现该标记时一个)。这些父节点应该共享为“LOL”标签定义的 DefaultMutableTreeNode 的一个实例。

不幸的是,使用 add(MutableTreeNode newChild) 从当前父节点所在的位置移除 newChild。这真的太糟糕了,因为我希望所有父节点都具有相同的子节点。

这是一张做错了的照片(柯蒂斯是作者,他应该出现在所有的节目中):

alt text

如何使用 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/

相关文章:

Java Arraylist 打印列表中每隔一个的数字

java - JToolbar 上的调整组件大小

java - Netbeans GUI 生成器 : how to edit generated code

java - OLAP4J 已死了吗?是否有等效的替代品?

java - 为什么不能注入(inject)泛型类?

java - 在控制台显示输出时遇到问题

Java 线程组织指南

java - 快速在 jpanel 中添加大量 jlabel

java - Netbeans 中的 JTree 拖放

java - 删除节点后 JTree 不更新