JFace/SWTのメニューはSwing/AWTのものと比べると、少しだけシンプルな構造になっているのではないかと思います。
ウィンドウの上端の「ファイル(F)」やら「編集(E)」やらが並んでいる部分、すなわちメニューバーの部分を表示するには、ApplicationWindow#createMenuManager()
をオーバーライドしてメニューバーの本体であるorg.eclipse.jface.action.MenuManager
オブジェクトを作成しておき、ApplicationWindow#addMenuBar()
を呼び出します。
MenuManagerオブジェクトの作り方は単純で、newするだけです。また「ファイル(F)」やら「編集(E)」やらの部分も同じMenuManagerオブジェクトで実現されます。
// メニューバーを作成する。
MenuManager bar = new MenuManager();
// ファイル(F)メニューを作成してメニューバーに追加する。
MenuManager fileMenu = new MenuManager("ファイル(&F)");
bar.add(fileMenu);
Fの前に&をつけることで、Fがニーモニックと認識され、表示上はFの下にアンダースコアが付きます。そしてAlt-Fでファイルメニューが表示されるようになります。
「ファイル(F)」メニューを選んだときに表示される「開く(O)」や「終了(Q)」といった個々のメニュー項目は、org.eclipse.jface.action.Action
のサブクラスを作成するのが便利です。Actionはメニューの項目だけでなく、ツールバーの項目やボタンにつけることもできます。例えばウィンドウを閉じてプログラムを終了させるActionであるExitActionであれば次のようにします。
import org.eclipse.jface.action.Action;
import org.eclipse.jface.window.ApplicationWindow;
/*
* 終了アクション
*/
public class ExitAction extends Action {
private ApplicationWindow window = null;
/**
* コンストラクタ
* @param window 親ウィンドウ
*/
public ExitAction(ApplicationWindow window) {
this.window = window;
setText("終了(&X)@Ctrl+W");
}
/**
* アクションの実行
*/
public void run() {
this.window.close();
}
}
Action#setText()
を呼び出して表示する文字列を指定します。Xの前に&があるのはMenuManagerの場合と同じです。@に続いてCtrl+Wとあるのはキーアクセラレータの指定です。Ctrl+Wでこのアクションが実行されます。
このExitActionをファイルメニューに追加するには対応するMenuManagerに追加するだけです。
fileMenu.add(new ExitAction(window));
ここでwindowはApplicationWindowのサブクラスのインスタンスです。