我有可以过滤的 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 可能是问题所在?
是路径有效():
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;
}