TabPane的JavaFX ProgressBar

时间:2013-12-30 15:52:53

标签: javafx-2

当我切换到主tabpane上的不同选项卡时,我有兴趣显示进度条。我的tabpane上的标签在实际出现之前需要一些时间(5-10秒)。我希望在切换选项卡时显示进度条。

1 个答案:

答案 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);