我有我可以過濾的JXTreeTable。當我篩選關鍵字時,會設置新模型。它適合我。JXTreeTable過濾後的expandPath
現在我想展開所有過濾的結果。爲此,我保存找到匹配節點的位置。 (它不能是葉。)
對於定位我創建這個方法的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()是我用之前的方法創建的TreePath的列表。
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;
}