JFaceを使ってGUIアプリケーションを作成する場合に、最もベースになる部品、というか一番外側のウィンドウになる部分というか、SwingだったらJFrameに相当する部分というのが、org.eclipse.jface.window.ApplicationWindow
クラスになります。各アプリケーションのクラスは(JFrameとは少し違い)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が提供するメソッドを呼び出したり、オーバーライドして作成するようになっています。