Java 过滤后的JXTreeTable expandPath
我有JXTreeTable,可以对其进行筛选。过滤关键字时,将设置一个新模型。对我来说没问题 现在,我想展开所有过滤结果。为此,我保存了找到匹配节点的位置。(它不可能是一片叶子。) 对于该位置,我使用以下方法创建树形图列表:Java 过滤后的JXTreeTable expandPath,java,swing,swingx,jxtreetable,Java,Swing,Swingx,Jxtreetable,我有JXTreeTable,可以对其进行筛选。过滤关键字时,将设置一个新模型。对我来说没问题 现在,我想展开所有过滤结果。为此,我保存了找到匹配节点的位置。(它不可能是一片叶子。) 对于该位置,我使用以下方法创建树形图列表: public TreePath getPath(TreeNode node) { List<TreeNode> list = new ArrayList<TreeNode>(); while (node != null) {
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());
}
但它没有任何效果,只有根被扩展,所有的子对象都被折叠。
在树冠上,最后一个元素是没有叶子。在System.out中,在这个循环中,我得到了:
-一,
真的
真的
真的
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(树路径,树模型){
if(path.getPathCount()==0){
返回model.getRoot().equals(path.getPathComponent(0));
}
对于(int x=1;x
我知道这是一篇老文章,但在花了一个小时研究类似问题之后,我将把我的发现放在这里
方法“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);
}
public**List**getPath(树节点){
列表=新的ArrayList();
**while(node!=model.getRoot()){**
列表。添加(节点);
node=node.getParent();
}
收款。反向(列表);
**退货清单**
}
**对于(列表元素:f.gettreepath()){**
元素添加(0,model.getRoot());
expandPath(新树路径(elem.toArray());
tree.scrollPathToVisible(元素);
}
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;
}
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);
}