Application Window

JFaceを使ってGUIアプリケーションを作成する場合に、最もベースになる部品、というか一番外側のウィンドウになる部分というか、SwingだったらJFrameに相当する部分というのが、org.eclipse.jface.window.ApplicationWindowクラスになります。各アプリケーションのクラスは(JFrameとは少し違い)ApplicationWindowクラスを継承してフレーム部分を作成することになります。

ApplicationWindowは参考文献でも紹介されていますが、以下の図のような構造をもっています。

ApplicationWindowの構造

一番外側の、ウィンドウシステムが直接管理する部分はShellといってSWTの部品です。ApplicationWindowはそのShellにメニューバーの領域、ツールバーの領域、コンテンツの領域、ステータス行の領域を作成し、それらを扱うメソッドを提供します。

例えばApplicationWindowをextendsしてSampleWindowというクラスを作成するとします。ApplicationWindowはabstractクラスですが、Shellを引数とするコンストラクタを持っていますので、SampleWindowクラスのコンストラクタもShellを引数にとることになります。

/**
 * JFaceのサンプルウィンドウクラス
 * @author PoisonSoft
 */
public class SampleWindow extends ApplicationWindow {

	/**
	 * コンストラクタ。
	 * @param shell 一番親になるフレーム
	 */
	public SampleWindow(Shell shell) {
		super(shell);
	}

そして、メニューバー(上端になります)とステータス行(下端になります)を持たせるには、addMenuBar()、addStatusLine()メソッドを呼び出します。

	/**
	 * SampleWindowのmainメソッド
	 * @param args 引数(ここでは無視する)
	 */
	public static void main(String[] args) {
		// 最初にShellを作成する
		Shell shell = new Shell();

		// SampleWindowオブジェクトを作成する
		SampleWindow sample = new SampleWindow(shell);

		// メニューバーをつける
		sample.addMenuBar();

		// ステータス行をつける
		sample.addStatusLine();

		// 閉じられるまでウィンドウを表示するよう設定
		sample.setBlockOnOpen(true);
		
		// ウィンドウを開く
		sample.open();
		
		// 資源を解放
		Display.getCurrent().dispose();
	}

実際のメニューバーはcreateMenuManager()メソッドをオーバーライドして作成します。またステータス行にはsetStatus()メソッドを呼び出すことで文字列を表示することができます。ツールバーについてもaddToolBar(SWT.FLAT | SWT.WRAP)を呼び出すことでツールバー領域が表示されるようになり、実際のツールバーはcreateToolBarManager()メソッドをオーバーライドして作成します。

中心になるコンテンツ部分はcreateContents()メソッドをオーバーライドして作成することになっています。このようにApplicationWindowが提供するメソッドを呼び出したり、オーバーライドして作成するようになっています。


SWT, JFace  ソフトウェア研究室  PoisonSoft