我正在做一个需要使用树形数据结构的项目。在做了一些研究后,我发现Java JTree对我的项目非常有用,但是我偶然发现了一个问题,我花了一周的时间来解决这个问题,但是没有用。
这就是问题所在,为了创建一个新的节点,必须实例化一个DefaultMutableTreeNode,我不确定如何在循环中做到这一点。通常,当我们想要在JTree中创建一个新节点时,我们首先会用以下方式声明这些节点:
DefaultMutableTreeNode parent = new DefaultMutableTreeNode("This is parent node.");
DefaultMutableTreeNode child = new DefaultMutableTreeNode("This is child node.");然后,为了将子节点添加/链接到父节点,我们将执行以下操作:
parent.add(child);我有两个包含父节点和子节点的数组列表,它们在父子关系中彼此对应,这意味着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)相同,但只有那些匹配字符串"This is parent node“的循环才会被检查和添加。
如果在循环中发现了一个不同的、不存在的父节点,则需要创建一个新的父节点,这是我不知道如何解决的棘手部分,因为我不知道如何让循环自动为子节点创建一个新的父节点实例。
发布于 2012-11-08 18:55:42
让我们假设您的节点基准是String(也就是说,您的ArrayLists的内容是String)。不过,该解释适用于任何其他Java对象。我们将这些内容称为“节点”,以区别于“树节点”。
您可以创建一个HashMap<String, DefautMutableTreeNode> m,这样m.get(node)就会返回相应的TreeNode。
现在,您必须遍历父级数组列表。在每个位置,您将拥有一个父对象和一个子对象。在地图上查一查。如果父TreeNode不存在,您必须首先创建它。如果子TreeNode不存在,则同样适用。您应该确保在创建任何TreeNodes之后更新地图。最后,将子项标记为父项的子项。
在此算法结束时,您应该遍历子数组中的所有节点。没有父母的是根。这是你的树根。
https://stackoverflow.com/questions/13274693
复制相似问题