当前位置: 首页 > 知识库问答 >
问题:

过滤后的JXTreeTable expandPath

乐正意智
2023-03-14

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

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

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

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()是我用之前的方法创建的树路径列表。

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

但它没有效果,只有根被扩展,所有的孩子都崩溃了。在树冠上,最后一个元素是没有叶子。在一个系统中。在这个循环中,我得到了所有:

-1对对对

System.out.println(tree.getRowForPath(elem)); System.out.println(f.isPathValid(elem,tree.getTreeTableModel())); System.out.println(tree.is可见(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;
}

共有1个答案

赵辉
2023-03-14

我知道这是一篇老帖子,但在花了一个小时研究类似问题后,我将把我的发现放在这里。

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

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

它应该与一些变化一起工作:

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);
}
 类似资料:
  • 我正在使用Stream filter,但它并没有像我预期的那样工作,所以我假设我不了解真正的工作原理。这是我的代码 基本上我所期望的是,如果第一个映射发出布尔false,那么它将被过滤,这样findAny将不会找到任何可选的,因此将调用orElse。但即使在过滤器中有true,也会调用isCommercialHierarchyInfoRestricted。 知道我做错了什么吗?

  • 问题内容: 如何在$ lookup之后添加过滤器,或者有其他方法可以执行此操作? 我的数据收集测试是: 我选择ID 100并汇总孩子: 我回来了: 但我只希望与“值:1”匹配的子项 最后,我希望得到以下结果: 问题答案: 这里的问题实际上是关于一些不同的东西,根本不需要。但是,对于仅从“$lookup之后过滤”标题到达此处的任何人,这些都是适合您的技术: MongoDB 3.6-子管道 较早-$

  • 我需要有关此问题的帮助: 查询显示所有参加COSC121、COSC126和MATH111三门课程的CIS或UT学生的学生ID、姓名和课程。按学生ID排序结果。提示:考虑使用自连接。 以下是表格: 学生学号学生姓名计划 成绩学生_ID课程_ID成绩 这是我目前的情况。 如果我将行course_id = “COSC126” 更改为 (course_id = “COSC121” 并且 course_id

  • 本文向大家介绍Java实现的文件过滤代码分享(按后辍过滤),包括了Java实现的文件过滤代码分享(按后辍过滤)的使用技巧和注意事项,需要的朋友参考一下 好久没有写代码了,也好久没有更新我的博客了,昨晚写了这个过滤文件名的程序,遂发之~

  • 问题内容: 有什么方法可以使用两个列的串联来过滤模型吗?我的模型是这样的: 我需要的是在两列连接之后进行过滤,如果用户输入A123,我希望能够找到具有系列和数字的任何项,例如%A和123%或%A1和23% django模型?还是有可能使用原始sql?我宁愿不使用串联构造一个新列。 问题答案: 是的,那是可能的;您需要将QuerySet与字段串联在一起,并且新的“虚拟”列将能够进行过滤。 有关过滤注

  • 在Controller/JAX-RSendpoint处理请求后,如何执行Spring Security过滤器? 当请求被双向处理时,一个普通的java过滤器链应该得到控制。如何使用Spring Security过滤器实现这一点?我试着给chain打电话。doFilter()开始,并在调用后添加我的逻辑。但是,在处理请求后,控件不会返回。 关于如何实现这一点,有什么建议吗?是否有可能使用Spring