遍历多级 JTree 的所有节点

cbt*_*cbt 5 java swing jtree

我有一个带有 DefaultTreeModel 的 JTree。我需要到达它的每个节点。

想象一下我有这棵树:

[A]
 |-[B]
 |-[C]
 |-[D]
 |  |-[E]
 |     |-[F]
 |     |-[G]
 |     |-[H]
 |-[I]
 |-[J]
 |-[K]
Run Code Online (Sandbox Code Playgroud)

我需要遍历它并打印出来:

   ---[A]---
   >[B]
   >[C]
   >---[D]---
   >>---[E]---
   >>>[F]
   >>>[G]
   >>>[H]
   >>+++[E]+++
   >+++[D]+++
   >[I]
   >[J]
   >[K]
   ---[A]---
Run Code Online (Sandbox Code Playgroud)

所以,我正在使用

  java.util.Enumeration en = root.preorderEnumeration();

  while (en.hasMoreElements()) {}
Run Code Online (Sandbox Code Playgroud)

但我想不出一个工作功能。我需要在启动节点时放置---NODE NAME---并用+++NODE NAME+++结束节点,但我无法做到这一点。如果只有 Parent 节点不是另一个 Parent 的最后一个元素,我就让它工作到一定程度。但是当最后一个节点也是父节点时它会中断。任何帮助,将不胜感激。

编辑:

现在我注意到它甚至没有我想象的那么好。这是我当前的输出:

----root (81)----
name
time
displaySize
----New Group1----
BaseX
BaseY
----New Group2----
BaseRadius
----New Group3----
Angle
DistanceFromCenter
++++New Group3++++
PlayerSpeed
MouseX
MouseY
++++New Group3++++
PlayerX
PlayerY
BonusSpawned
actorTags
++++New Group3++++
BonusTime
BonusWhich
+++root+++
Run Code Online (Sandbox Code Playgroud)

编辑2:

while (en.hasMoreElements()) {

    nodeTemp = node;
    node = (DefaultMutableTreeNode) en.nextElement();

    String nodeName = node.toString();

    if (node.getChildCount() > 0) {

        System.out.println("---" + nodeName + "---");

    } else {

        if (nodeTemp.getChildCount() == 0 && nodeTemp.getParent() != node.getParent()) {
            System.out.println("+++" + nodeName + "+++");
            loopCount++;

        }

        System.out.println(nodeName);

    }

    loopCount++;

}
Run Code Online (Sandbox Code Playgroud)

Jav*_*vil 3

使用递归你可以做这样的事情 psuedocode

  1. 从根开始
  2. 如果是叶子 - 打印节点名称并返回
  3. 打印 --- 节点名称 ----
  4. 如果节点有子节点 - 对每个子节点进行递归(从 2 开始)
  5. 打印 +++ 节点名称 ++++

编辑我的递归方法版本

public static void print(DefaultMutableTreeNode aNode)
{
    String name = aNode.toString();
    int level= aNode.getLevel();
    String placement = "";
    while (level > 0)
    {
        placement += ">";
        level--;
    }
    if(aNode.isLeaf())
    {
        System.out.println(placement + name);
        return;
    }

    System.out.println(placement + "--- " + name + " ---");
    for(int i = 0 ; i < aNode.getChildCount() ; i++)
    {
        print((DefaultMutableTreeNode)aNode.getChildAt(i));
    }
    System.out.println(placement + "+++ " + name + " +++");
}
Run Code Online (Sandbox Code Playgroud)

这将为您提供 > 的级别,例如我的输出是:

public static void print(DefaultMutableTreeNode aNode)
{
    String name = aNode.toString();
    int level= aNode.getLevel();
    String placement = "";
    while (level > 0)
    {
        placement += ">";
        level--;
    }
    if(aNode.isLeaf())
    {
        System.out.println(placement + name);
        return;
    }

    System.out.println(placement + "--- " + name + " ---");
    for(int i = 0 ; i < aNode.getChildCount() ; i++)
    {
        print((DefaultMutableTreeNode)aNode.getChildAt(i));
    }
    System.out.println(placement + "+++ " + name + " +++");
}
Run Code Online (Sandbox Code Playgroud)