Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 存储jtree的状态/扩展节点以恢复状态_Java_User Interface_Swing_Jtree_Treemodel - Fatal编程技术网

Java 存储jtree的状态/扩展节点以恢复状态

Java 存储jtree的状态/扩展节点以恢复状态,java,user-interface,swing,jtree,treemodel,Java,User Interface,Swing,Jtree,Treemodel,我和JTree一起工作 我想知道在JTree中展开哪些节点以保存其状态(即保存所有展开的路径)的最佳方法是什么。因此,如果我调用model.reload(),Jtree将不会保持折叠状态,但我将能够向用户恢复其原始状态,即,所有扩展的节点都将被扩展。Santhosh Kumar是我的Swing Hacks助手之一 回答:我是Java新手,这也让我发疯。但我发现了…我想。下面的代码在我的应用程序中运行良好,但我认为在某些异常情况下,它确实存在无法正常工作的风险 import javax.swing

我和JTree一起工作


我想知道在JTree中展开哪些节点以保存其状态(即保存所有展开的路径)的最佳方法是什么。因此,如果我调用
model.reload()
,Jtree将不会保持折叠状态,但我将能够向用户恢复其原始状态,即,所有扩展的节点都将被扩展。

Santhosh Kumar是我的Swing Hacks助手之一


回答:

我是Java新手,这也让我发疯。但我发现了…我想。下面的代码在我的应用程序中运行良好,但我认为在某些异常情况下,它确实存在无法正常工作的风险

import javax.swing.JTree;
import javax.swing.tree.TreePath;

public class TreeState {

private final JTree tree;
private StringBuilder sb;

public TreeState(JTree tree){
    this.tree = tree;
}

public String getExpansionState(){

    sb = new StringBuilder();

    for(int i =0 ; i < tree.getRowCount(); i++){
        TreePath tp = tree.getPathForRow(i);
        if(tree.isExpanded(i)){
            sb.append(tp.toString());
            sb.append(",");
        }
    }

    return sb.toString();

}   

public void setExpansionState(String s){

    for(int i = 0 ; i<tree.getRowCount(); i++){
        TreePath tp = tree.getPathForRow(i);
        if(s.contains(tp.toString() )){
            tree.expandRow(i);
        }   
    }
}

}
import javax.swing.JTree;
导入javax.swing.tree.TreePath;
公屋{
私有最终JTree树;
私家侦探;
公共树木(JTree tree){
this.tree=树;
}
公共字符串getExpansionState(){
sb=新的StringBuilder();
对于(int i=0;i对于(int i=0;i您需要存储已展开的树路径,并在重新加载树模型后再次展开它们。所有具有子体的树路径都将被视为已展开。另外,如果删除了路径,请在重新加载后检查路径是否仍然可用

public void reloadTree(JTree jYourTree) {
    List<TreePath> expanded = new ArrayList<>();
    for (int i = 0; i < jYourTree.getRowCount() - 1; i++) {
        TreePath currPath = getPathForRow(i);
        TreePath nextPath = getPathForRow(i + 1);
        if (currPath.isDescendant(nextPath)) {
            expanded.add(currPath);
        }
    }
    ((DefaultTreeModel)jYourTree.getModel()).reload();
    for (TreePath path : expanded) {
        jYourTree.expandPath(path);
    }
}
公共void重载树(JTree jYourTree){
展开列表=新建ArrayList();
对于(int i=0;i
Kumar先生不是黑客,他是救世主。如果他是这样的话,我的代表将被困在-13。