我开发了一个搜索JTree节点的应用程序,例如,如果我搜索A1节点,TreePath就是Root,A,A1。应该保留节点A和Root的其他子节点(B,C,D) ,E)应该从Root中删除。
问题在于,当我输入A1节点A,B和D时,如果它们是TreePath的一部分,则根据它们保留或从根节点删除它们(此处A保留,而B和D从但是,从枚举中错过了C和E,如果它们构成了TreePath,则不会被检查。我已经调试了应用程序并且它已经获取了" D"在" B"之后而不是" C"。
我打印了Root的所有孩子,结果是-A B C D E. 但是,虽然错过了C和E集合的迭代,但有人可以提供解决方案。
JTree
{
String key = field.getText().trim();
System.out.println("Key entered is " + key);
boolean deleteNode=true;
TreePath path = searchNode(key);
int count=path.getPathCount();
DefaultMutableTreeNode[] nodes=new DefaultMutableTreeNode[count];
for(int i=0;i<count;i++)
{
nodes[i]=(DefaultMutableTreeNode) path.getPathComponent(i);
}
System.out.println(Arrays.toString(nodes));
if (path != null)
{
TreeModel model = tree.getModel();
DefaultMutableTreeNode root = (DefaultMutableTreeNode) model.getRoot();
Enumeration children=root.children();
while(children.hasMoreElements())
{
DefaultMutableTreeNode node=(DefaultMutableTreeNode)children.nextElement();
System.out.println(node.toString());
}
children=root.children();
while(children.hasMoreElements())
{
deleteNode=true;
DefaultMutableTreeNode node=(DefaultMutableTreeNode)children.nextElement();
System.out.println(node.toString());
String nodeName=(String) node.getUserObject();
for(int i=0;i<nodes.length;i++)
{
String temp=(String)nodes[i].getUserObject();
if(temp.equalsIgnoreCase(nodeName))
{
System.out.println(node.toString()+" is part of Tree Path");
deleteNode=false;
break;
}
}
if(deleteNode)
{
System.out.println(node.toString()+" is not the part of Tree Path");
root.remove(node);
}
}
DefaultTreeModel newModel = new DefaultTreeModel(root);
clonedTree.setModel(newModel);
clonedTree.expandPath(path);//expand a node
clonedTree.setSelectionPath(path);//make it node visible
System.out.println("match found");
} else
{
System.out.println("match is'nt found");
removeSubTree();
}
}
输出 -
一个 乙 C d ë
一个 A是Tree Path的一部分 乙 B不是Tree Path的一部分 d D不是Tree Path的一部分