我有一个带有 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)
使用递归你可以做这样的事情 psuedocode
编辑我的递归方法版本
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)
| 归档时间: |
|
| 查看次数: |
7950 次 |
| 最近记录: |