3.5.2.1.34. 进度条

在线示例

API 文档

ProgressBar 组件用于显示需要长时间处理的任务的进度。

gui progressBar

该组件的 XML 名称: progressBar

下面是该组件与后台任务机制一起使用的示例:

  1. <progressBar id="progressBar" width="100%"/>
  1. @Inject
  2. private ProgressBar progressBar;
  3. @Inject
  4. private BackgroundWorker backgroundWorker;
  5. private static final int ITERATIONS = 5;
  6. @Subscribe
  7. protected void onInit(InitEvent event){
  8. BackgroundTask<Integer, Void> task = new BackgroundTask<Integer, Void>(300, getWindow()) {
  9. @Override
  10. public Void run(TaskLifeCycle<Integer> taskLifeCycle) throws Exception{
  11. for(int i = 1; i <= ITERATIONS; i++) {
  12. TimeUnit.SECONDS.sleep(2); (1)
  13. taskLifeCycle.publish(i);
  14. }
  15. return null;
  16. }
  17. @Override
  18. public void progress(List<Integer> changes){
  19. double lastValue = changes.get(changes.size() - 1);
  20. progressBar.setValue((lastValue / ITERATIONS));
  21. }
  22. };
  23. BackgroundTaskHandler taskHandler = backgroundWorker.handle(task);
  24. taskHandler.execute();
  25. }
1一些比较耗时的任务

BackgroundTask.progress() 方法在 UI 线程中被执行,在这个方法里给 ProgressBar 组件设置当前的进度值。组件值应该是从 0.01.0double 类型的数值。

可以使用 ValueChangeListener 跟踪 ProgressBar 值的变化。可以使用 isUserOriginated() 方法跟踪 ValueChangeEvent 的来源。

如果正在运行的处理无法发送有关进度的信息,则可以显示表示不确定状态的指示符。将 indeterminate 设置为 true 以显示不确定状态。默认为 false。例如:

  1. <progressBar id="progressBar" width="100%" indeterminate="true"/>

默认情况下,不定进度条显示为水平状态条。要改为显示螺旋状的进度条,可以设置属性 stylename="indeterminate-circle"

要使进度条指示器显示为在进度条上移动的点(而不是增长条),请使用 point 预定义样式:

  1. progressBar.setStyleName(HaloTheme.PROGRESSBAR_POINT);

progressBar 的属性

align - caption - captionAsHtml - contextHelpText - contextHelpTextHtmlEnabled - css - description - descriptionAsHtml - enable - box.expandRatio - height - id - indeterminate - stylename - visible - width
progressBar 的预定义样式

indeterminate-circle - point
API

addValueChangeListener