首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >滤波后的JXTreeTable expandPath

滤波后的JXTreeTable expandPath
EN

Stack Overflow用户
提问于 2014-04-29 11:43:45
回答 1查看 456关注 0票数 2

我有JXTreeTable,我可以过滤。当我过滤关键字时,会设置一个新的模型。对我来说没问题。

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

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

代码语言:javascript
复制
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列表。

代码语言:javascript
复制
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():

代码语言:javascript
复制
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;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-05 05:14:37

我知道这是一篇老文章,但我会把我的发现放在这里,花一个小时在类似的问题上。

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

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

它应该与以下几项修改一起工作:

代码语言:javascript
复制
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);
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23363739

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档