ProgressBar
長い処理の進捗の表現は、
ProgressIndicatorクラスを使用するのが一般的ですが、
目的は同じでも、異なったオペレーションを提供するのがProgressBarクラスです。
ProgressIndicatorと異なる大きな点は、setSelection(int)メソッドです。
ProgressIndicatorは、beginTask(int)、worked(double)、done()の3つのメソッドを用いて
進捗度合いを表しましたが、
ProgressBarは、setSelection(int)でバーの長さを指定するだけで、処理の開始や終了は特に指定しません。
つまりProgressBarは、マニュアル操作なわけです。
プログラムの構造は、
ProgressIndicatorの説明
で示したものとさほど変わりません。
import org.eclipse.jface.window.ApplicationWindow;
import org.eclipse.jface.window.Window;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.ProgressBar;
public class ProgressBarDemonstrate extends ApplicationWindow {
private static final int MAX = 99;
private static final int MIN = 0;
private ProgressBar prBar;
private ProgressBarDemonstrate() {
super(null);
}
protected Control createContents(Composite parent) {
/* ウィンドウのタイトルを設定 */
parent.getShell().setText("ProgressBarDemonstrate");
/* 他のコンポーネントを配置するためのコンポジットを作成 */
Composite composite = new Composite(parent, SWT.NONE);
/* ProgressBarをスタートするボタン */
Button startButton = new Button(composite, SWT.PUSH);
startButton.setText("start progress");
startButton.setBounds(5, 5, 100, 30);
startButton.addSelectionListener(new StartButtonListener());
/* ProgressBarをリセットするボタン */
Button resetButton = new Button(composite, SWT.PUSH);
resetButton.setText("reset progress");
resetButton.setBounds(110, 5, 100, 30);
// prBarのバーを0にするイベント
resetButton.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
prBar.setSelection(MIN);
}
});
/* ProgressBar作成 */
prBar = new ProgressBar(composite, SWT.HORIZONTAL);
prBar.setMaximum(MAX);
prBar.setMinimum(MIN);
prBar.setBounds(5, 50, 300, 20);
composite.pack();
parent.pack();
return parent;
}
/**
* startButtonに登録される。
* ProgressRunnable#run()を呼び出す。
*/
private class StartButtonListener extends SelectionAdapter {
public void widgetSelected(SelectionEvent e) {
Display.getCurrent().asyncExec(new ProgressRunnable());
}
}
/**
* StartButtonListenerから呼び出される。
* prBarをMINからMAXまで伸ばす。
*/
private class ProgressRunnable implements Runnable {
public void run() {
for (int i=MIN ; i<=MAX ; i++) {
prBar.setSelection(i);
}
}
}
public static void main(String[] argsA) {
Window w = new ProgressBarDemonstrate();
w.setBlockOnOpen(true);
w.open();
Display.getCurrent().dispose();
}
}
Copyright (c)
2007 -
2007
, KenjiNagao All Rights Reserved.