我正在尝试为文件夹同步应用中的算法实现“取消”按钮。该算法以递归方式遍历用户指定的目录结构,将其文件和目录放入TreeView,并根据它们相对于其他文件夹中的等效文件是新的,删除的,更改的还是不变的进行标记。简化代码供参考:

fillInTreeView(File x, TreeItem root) {
    if (x.isFile()) {
        newBranch = makeBranch(x.getName(x.getNameCount() - 1).toString(), root);
        assignMark(newBranch);
    } else {
        newBranch = makeBranch(x.getName(x.getNameCount() - 1).toString(), root);
        assignMark(newBranch);
        fillInTreeView(x, newBranch);
    }
}

我不满意的是该“取消”的含义。如果我从顶部删除树中的所有内容,该函数是否仍将继续添加新内容,从还没有到达取消算法的文件中调用自身,从而使整个按钮变得毫无意义?我以为我宁愿先问一问,然后花几天的时间来尝试实施它,而只需要稍后再问及重新发现美国。

最佳答案

像这样尝试:

private static boolean cancelled = false;

fillInTreeView(File x, TreeItem root) {
   if(cancelled) return;
   if (x.isFile()) {
        newBranch = makeBranch(x.getName(x.getNameCount() - 1).toString(), root);
        assignMark(newBranch);
    } else {
        newBranch = makeBranch(x.getName(x.getNameCount() - 1).toString(), root);
        assignMark(newBranch);
        fillInTreeView(x, newBranch);
    }
}

/*Your CLick-Listener*/
public void onClick(){
       cancelled = true;
}

10-08 07:01