public class ProgressBarExample { public static void main(String[] args) { Display display = new Display(); Shell shell = new Shell(display); shell.setLayout(new GridLayout()); //添加平滑的进度条 ProgressBar pb1 = new ProgressBar(shell, SWT.HORIZONTAL | SWT.SMOOTH); pb1.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); //设置进度条的最小值 pb1.setMinimum(0); //设置进度条的最大值 pb1.setMaximum(30); //添加自动递增的进度条 ProgressBar pb2 = new ProgressBar(shell, SWT.HORIZONTAL | SWT.INDETERMINATE); pb2.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); //添加线程,在线程中处理长时间的任务,并最终反映在平滑进度条上 new LongRunningOperation(display, pb1).start(); shell.open(); while (!shell.isDisposed()) { if (!display.readAndDispatch()) { display.sleep(); } } } } class LongRunningOperation extends Thread { private Display display; private ProgressBar progressBar; public LongRunningOperation(Display display, ProgressBar progressBar) { this.display = display; this.progressBar = progressBar; } public void run() { //模仿长时间的任务 for (int i = 0; i < 30; i++) { try { Thread.sleep(1000); } catch (InterruptedException e) { } display.asyncExec(new Runnable() { public void run() { if (progressBar.isDisposed()) return; //进度条递增 progressBar.setSelection(progressBar.getSelection() + 1); } }); } } }
以上代码添加了两个进度条,一个进度条为自动显示增加进度的信息(SWT.INDETERMINAT样式),另外一个进度条通过线程处理长时间的任务,并设定进度条的信息。程序运行效果如图6所示。

图6 ProgressBar组件
进度条有不同的样式,在程序中,开发人员可以控制进度条的进度,执行某些长时间的操作。
| 第1页: 菜单组件 | 第2页: 工具栏组件ToolBar和ToolItem |
| 第3页: 工具栏组件CoolBar和CoolItem | 第4页: 滚动组件Slider |
| 第5页: 刻度组件Scale | 第6页: 进度条组件ProgressBar |