首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何动态填充JTree?

问如何动态填充JTree?
EN

Stack Overflow用户
提问于 2012-11-08 01:12:02
回答 1查看 2.3K关注 0票数 1

我正在做一个需要使用树形数据结构的项目。在做了一些研究后,我发现Java JTree对我的项目非常有用,但是我偶然发现了一个问题,我花了一周的时间来解决这个问题,但是没有用。

这就是问题所在,为了创建一个新的节点,必须实例化一个DefaultMutableTreeNode,我不确定如何在循环中做到这一点。通常,当我们想要在JTree中创建一个新节点时,我们首先会用以下方式声明这些节点:

代码语言:javascript
复制
DefaultMutableTreeNode parent = new DefaultMutableTreeNode("This is parent node.");
DefaultMutableTreeNode child = new DefaultMutableTreeNode("This is child node.");

然后,为了将子节点添加/链接到父节点,我们将执行以下操作:

代码语言:javascript
复制
parent.add(child);

我有两个包含父节点和子节点的数组列表,它们在父子关系中彼此对应,这意味着arraylistParent.get(x)将始终是arraylistChild.get(x)的父节点。

我在想,通过使用for循环,我可以做到:

代码语言:javascript
复制
for (int x = 0; x < arraylistParent.size(); x++){
    parent.add(new DefaultMutableTreeNode(arraylistChild.get(x)));
}

这只能在平面层次结构树中工作,这显然不是我的情况。我在arrayListParent中有不同的父节点,在添加子节点之前我需要检查这些节点,但同样地,并不是所有的子节点都有相同的、单一的父节点。我的数组列表可能包含如下内容:

代码语言:javascript
复制
arraylistParent = [root, p1, p2, p2, p3, p1]
arraylistChild = [p1, p2, p5, p3, p4, p5]

我想要生成这样的树结构:

代码语言:javascript
复制
root
  ..p1
    ..p2
      ..p5          
      ..p3
        ..p4
    ..p5

显然,我可以在其中抛出几个if循环来检查parent.getUserObject()是否与arraylistParent.get(x)相同,但只有那些匹配字符串"This is parent node“的循环才会被检查和添加。

如果在循环中发现了一个不同的、不存在的父节点,则需要创建一个新的父节点,这是我不知道如何解决的棘手部分,因为我不知道如何让循环自动为子节点创建一个新的父节点实例。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-08 18:55:42

让我们假设您的节点基准是String(也就是说,您的ArrayLists的内容是String)。不过,该解释适用于任何其他Java对象。我们将这些内容称为“节点”,以区别于“树节点”。

您可以创建一个HashMap<String, DefautMutableTreeNode> m,这样m.get(node)就会返回相应的TreeNode。

现在,您必须遍历父级数组列表。在每个位置,您将拥有一个父对象和一个子对象。在地图上查一查。如果父TreeNode不存在,您必须首先创建它。如果子TreeNode不存在,则同样适用。您应该确保在创建任何TreeNodes之后更新地图。最后,将子项标记为父项的子项。

在此算法结束时,您应该遍历子数组中的所有节点。没有父母的是根。这是你的树根。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13274693

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档