指示Java FX TreeItem getChildren延迟执行期间的进程

指示Java FX TreeItem getChildren延迟执行期间的进程,java,treeview,javafx-2,Java,Treeview,Javafx 2,我实现了一个动态构建的Jafa FX2树视图(文件系统目录的树视图),根据中的示例,在扩展节点时延迟加载目录子级 当加载子节点需要一段时间时,接口没有响应,特别是当一个包含很多子节点的树节点被展开时,所以我想显示一个进度指示器。在经历了大量的背景任务、事件等方面的尝试之后,我还是没有一个想法 在TreeItem.getChildren()期间实现进度指标的优雅方法是什么? 这是我的解决方案(Java 8): 为进度指示器创建字段: private ProgressIndicator pinMai

我实现了一个动态构建的Jafa FX2树视图(文件系统目录的树视图),根据中的示例,在扩展节点时延迟加载目录子级

当加载子节点需要一段时间时,接口没有响应,特别是当一个包含很多子节点的树节点被展开时,所以我想显示一个进度指示器。在经历了大量的背景任务、事件等方面的尝试之后,我还是没有一个想法

在TreeItem.getChildren()期间实现进度指标的优雅方法是什么?


这是我的解决方案(Java 8):
为进度指示器创建字段:

private ProgressIndicator pinMain;
在构造函数中,创建它并设置大小:

pinMain = new ProgressIndicator();
pinMain.setPrefSize(20, 20);
在getChildren方法中,为长时间操作创建任务。在启动树项目的任务setGraphic之前,执行后删除图形:

@Override
public ObservableList<TreeItem<String>> getChildren() {  
    if (hasLoadedChildren == false) {
        Task<ArrayList<LazyTreeItem>> task = new Task<ArrayList<LazyTreeItem>>() {
            @Override
            protected void succeeded() {
                super.succeeded();
                hasLoadedChildren = true;
                LazyTreeItem.super.getChildren().setAll(getValue());
                // remove progress indicator
                setGraphic(null);
            }            
            @Override
            protected ArrayList<LazyTreeItem> call() throws Exception {
                ArrayList<LazyTreeItem> list = loadChildren();
                return list;
            }
        };
        Thread t = new Thread(task);
        // show progress indicator
        setGraphic(pinMain);
        t.start();
    }  
    return super.getChildren();  
}
@覆盖
公共可观察列表getChildren(){
if(hasLoadedChildren==false){
任务=新任务(){
@凌驾
受保护的无效已成功(){
super.successed();
hasLoadedChildren=true;
LazyTreeItem.super.getChildren().setAll(getValue());
//移除进度指示器
设置图形(空);
}            
@凌驾
受保护的ArrayList调用()引发异常{
ArrayList=loadChildren();
退货清单;
}
};
线程t=新线程(任务);
//显示进度指示器
设置图形(pinMain);
t、 start();
}  
返回super.getChildren();
}

谢谢Sergei,抱歉等了这么久才做出反应。同时,由于我没有进展,其他项目更为重要,所以该项目处于搁置状态。起初我看不到ProgesIndicator,因为我实现了自己的TreeCell工厂。通过标准TreeCell实现,它可以完美地工作。