我正在做一个需要使用树数据结构的项目。做了一些研究后,我发现 Java JTree 对我的项目很有用,但是我偶然发现了一个问题,我花了一周时间修复但无济于事。
这是问题所在,为了创建一个新节点,必须实例化 DefaultMutableTreeNode ,我不确定如何在循环中完成。通常当我们想在 JTree 中创建一个新节点时,我们会首先通过以下方式声明节点:
DefaultMutableTreeNode parent = new DefaultMutableTreeNode("This is parent node.");
DefaultMutableTreeNode child = new DefaultMutableTreeNode("This is child node.");
然后,为了将子节点添加/链接到父节点,我们将执行以下操作:
parent.add(child);
我有两个包含父节点和子节点的arraylist,它们以父子关系相互对应,这意味着arraylistParent.get(x) 将始终是arraylistChild.get(x) 的父级。
我在想,通过使用 for 循环,我可以做到:
for (int x = 0; x < arraylistParent.size(); x++){
parent.add(new DefaultMutableTreeNode(arraylistChild.get(x)));
}
这只能在平面层次结构树中工作,对我来说显然不是这样。我将在 arrayListParent 中有不同的父节点,我需要在添加子节点之前对其进行检查,但同样,并非所有子节点都具有相同的单个父节点。我的数组列表可能包含如下内容:
arraylistParent = [root, p1, p2, p2, p3, p1]
arraylistChild = [p1, p2, p5, p3, p4, p5]
我想生成这样的树结构:
root
..p1
..p2
..p5
..p3
..p4
..p5
显然,我可以在里面抛出一些 if 循环来检查 parent.getUserObject() 是否与 arraylistParent.get(x) 相同,但只有与字符串“这是父节点”匹配的那些才会被检查和添加。
如果在循环中找到不同的、不存在的父级,则需要创建一个新的父级,这是我不知道如何解决的棘手部分,因为我不知道如何让循环自动创建一个新的子节点的父实例。