gpt4 book ai didi

java - 搜索 JTree

转载 作者:行者123 更新时间:2023-11-29 04:01:11 25 4
gpt4 key购买 nike

我有一个 JTree,我正在尝试搜索它。我写了一个快速递归搜索函数。该函数将父/子节点名称对作为字符串。

private void RecursiveSearch(javax.swing.tree.DefaultMutableTreeNode node, java.util.ArrayList<TreeNode> nodelist, java.lang.String destination, java.lang.String origin) {
nodelist.add(node);
Controller.TreeData parentdata = (Controller.TreeData)node.getUserObject();
for(int i = 0; i < node.getChildCount(); i++) {
javax.swing.tree.DefaultMutableTreeNode childnode = (javax.swing.tree.DefaultMutableTreeNode)node.getChildAt(i);
Controller.TreeData childdata = (Controller.TreeData)childnode.getUserObject();
if (parentdata.GetName().trim().toUpperCase().equals(origin) && childdata.GetName().trim().toUpperCase().equals(destination)) {
nodelist.add(childnode);
return;
}
}
// We didn't find it. Recurse.
for(int i = 0; i < node.getChildCount(); i++) {
RecursiveSearch((javax.swing.tree.DefaultMutableTreeNode)node.getChildAt(i), nodelist, destination, origin);
}
nodelist.remove(node);
}

但是,它没有在应该的时候返回值。我从 TreeModel 得到了根节点,数组开始时是空的。我检查了 JTree 和 TreeModel,它们似乎都没有提供任何类型的搜索功能。有什么建议吗?

编辑:我不会尝试解释我的原始功能(它最初是用另一种语言编写的)。但我用这个代替了它:

javax.swing.tree.DefaultMutableTreeNode rootnode = (javax.swing.tree.DefaultMutableTreeNode)datatree.getModel().getRoot();
java.util.Enumeration nodeenum = rootnode.breadthFirstEnumeration();
while(nodeenum.hasMoreElements()) {
javax.swing.tree.DefaultMutableTreeNode nextnode = (javax.swing.tree.DefaultMutableTreeNode)nodeenum.nextElement();
Controller.TreeData data = (Controller.TreeData)nextnode.getUserObject();
javax.swing.tree.DefaultMutableTreeNode parentnode = (javax.swing.tree.DefaultMutableTreeNode)nextnode.getParent();
Controller.TreeData parentdata = (Controller.TreeData)(parentnode.getUserObject());
if (parentdata.GetName().trim().toUpperCase().equals(origin) && data.GetName().trim().toUpperCase().equals(destination)) {
datatree.setSelectionPath(new javax.swing.tree.TreePath(treemodel.getPathToRoot(nextnode)));
return;
}
}
javax.swing.JOptionPane.showMessageDialog(primaryframe, "Could not find the requested depots");

然而,它实际上似乎并没有找到任何东西。我从根节点开始,所以它应该枚举整棵树。修复了该版本空指针异常的bug。

最佳答案

如果您使用 DefaultMutableTreeNode在你的TreeModel你可以简单地使用 breadthFirstEnumeration()depthFirstEnumeration()搜索树。

关于java - 搜索 JTree,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3468721/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com