当我切换到主tabpane上的不同选项卡时,我有兴趣显示进度条。我的tabpane上的标签在实际出现之前需要一些时间(5-10秒)。我希望在切换选项卡时显示进度条。
答案 0 :(得分:2)
在单独的任务< T>中下载数据,其中T是封装所有数据的类型。将选项卡的内容设置为进度条;使用Task注册onSucceeded处理程序,该处理程序将选项卡的内容设置为数据显示,然后启动任务。
所以这看起来像是:
final Tab tab = ... ;
final ProgressBar progressBar = new ProgressBar();
final Task<MyDataType> loadDataTask = new Task<MyDataType>() {
@Override
public MyDataType call() throws Exception {
// download data...
MyDataType result = ... ;
return result ;
}
};
tab.setContent(progressBar);
loadDataTask.setOnSucceeded(new EventHandler<WorkerStateEvent>() {
@Override
public void handle(WorkerStateEvent event) {
MyDataType data = loadDataTask.getValue();
Node tabContent = ... ; // build tab content from data
tab.setContent(tabContent);
}
});
final Thread thread = new Thread(loadDataTask);
thread.setDaemon(true);
thread.start();
不要在任务的调用(...)方法中更新属于场景图的任何UI元素。如果您可以测量数据下载的进度并希望在progressBar中显示它(而不是一个不确定的进度条),您可以
progressBar.progressProperty().bind(loadDataTask.progressProperty());
然后在Task的调用方法中,调用
updateProgress(amountDone, totalAmount);