<更新記録>
2007年 12月 2日
作成

姉妹サイト検索 Web検索


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();
	}
}

Powered by VeryEasyCMS