我有一个由DefaultMutableTreeNodes组成的JTree。每个节点都有一个包含一些数据的UserObject。其中一个数据是我称之为“大小”的东西。我想在树中更新每个节点,并更新其子节点的“大小”。
public void traverse(DefaultMutableTreeNode root)
{
Field f;
int offset = 0;
int size = 0;
// Just changing enumeration kind here
@SuppressWarnings("unchecked")
Enumeration<DefaultMutableTreeNode> en = root.postorderEnumeration();
while (en.hasMoreElements())
{
DefaultMutableTreeNode node = en.nextElement();
f = (Field)node.getUserObject();
if (node.isLeaf())
{
size += f.getSize();
}
else
{
f.setSize(size);
size = 0;
}
System.out.println((node.isLeaf() ? " - " : "+ ") + " -----> "+f);
}
}
我已经尝试过上面的代码,但它只适用于节点,直到第二级。
我错过了什么?
TIA。
答案 0 :(得分:0)
也许试试:
Seudocode
public void traverse(DefaultMutableTreeNode root)
{
Field f;
@SuppressWarnings("rawtypes")
Enumeration en = root.postorderEnumeration();
while (en.hasMoreElements())
{
DefaultMutableTreeNode currentNode = (DefaultMutableTreeNode) en.nextElement();
if (currentNode.getParent() != null)
{
f = ((Field) ((DefaultMutableTreeNode) currentNode.getParent()).getUserObject());
f.setSize(f.getSize() + ((Field) ((DefaultMutableTreeNode) currentNode).getUserObject()).getSize());
}
}
}
如果postOrderEnumerator
以我认为的方式运作,这应该有用。