gpt4 book ai didi

java - 过滤后的JXTreeTable ExpandPath

转载 作者:太空宇宙 更新时间:2023-11-04 06:50:27 24 4
gpt4 key购买 nike

我有可以过滤的 JXTreeTable。当我过滤关键字时,会设置一个新模型。对我来说效果很好。

现在我想展开所有过滤的结果。为此,我保存找到匹配节点的位置。 (它不可能是一片叶子。)

对于该位置,我使用以下方法创建一个 TreePaths 列表:

public TreePath getPath(TreeNode node) {
List<TreeNode> list = new ArrayList<TreeNode>();

while (node != null) {
list.add(node);
node = node.getParent();
}
Collections.reverse(list);

return new TreePath(list.toArray());
}

现在我迭代这个列表并调用expandPath(在设置新模型之后)其中 getTreePaths() 是我用之前的方法创建的 TreePaths 列表。

for (TreePath elem : f.getTreePaths()) {
tree.expandPath(elem);
tree.scrollPathToVisible(elem);
}

但是没有任何效果,只是展开了根,所有的子项都折叠了。在 TreePath 中,最后一个元素不是叶子。在这个循环的 System.out 中,我得到了所有:

-1真的真的正确

System.out.println(tree.getRowForPath(elem)); System.out.println(f.isPathValid(elem,tree.getTreeTableModel()));System.out.println(tree.isVisible(elem));System.out.println(tree.isExpanded(elem));

getRowForPath 的 -1 可能是问题所在?

isPathValid():

public boolean isPathValid(TreePath path,TreeTableModel model) {
if (path.getPathCount() == 0) {
return model.getRoot().equals(path.getPathComponent(0));
}

for (int x = 1; x < path.getPathCount(); x++) {
if (model.getIndexOfChild(path.getPathComponent(x - 1),
path.getPathComponent(x)) == -1) {
return false;
}
}
return true;
}

最佳答案

我知道这是一篇旧帖子,但在花了一个小时解决类似问题后,我会将我的发现放在这里。

方法“isPathValid”仅通过检查子项 (x) 是否属于父项 (x - 1) 来验证序列是否正确,但不会验证根是否与表模型相同(除非路径计数为零)。

在过滤时,您通常会触发表模型的新根,因此,如果您在更新模型(并触发新根)“之前”捕获了 TreePaths,则表将无法找到该路径,尽管该路径本身是有效的。

它应该可以通过一些更改来工作:

public **List** getPath(TreeNode node) {
List<TreeNode> list = new ArrayList<TreeNode>();

**while (node != model.getRoot()) {**
list.add(node);
node = node.getParent();
}
Collections.reverse(list);

**return list;**
}

**for (List elem : f.getTreePaths()) {**
elem.add(0, model.getRoot());
tree.expandPath(new TreePath(elem.toArray());
tree.scrollPathToVisible(elem);
}

关于java - 过滤后的JXTreeTable ExpandPath,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23363739/

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