« ページへのビューの表示・非表示 | トップページ | ビュー上のコンテキストメニュー(2) »

2004.02.11

ビュー上のコンテキストメニュー(1)

ビューの上でマウスの右ボタンを押すと表示されるコンテキストメニューをプログラムにより作成してみる。

コンテキストメニューの作成処理はIViewPartインタフェースの実装クラスのcreatePartControlメソッド内で行うのが一般的である。

  public class TestView extends ViewPart {
    public void createPartControl(Composite parent) {
      Control control = new Label(parent, SWT.NONE);
      createContextMenu(control);
    }
    ...
  }

ビュー内のコンポーネントとしてLabelコンポーネントを配置し,そのLabelコンポーネント上にコンテキストメニューを追加してみる。コンテキストメニューの追加処理はcreateContextMenuメソッドに記述することとして,コンテキストメニューを追加するLabelコンポーネントをそのメソッドに渡している。

では,コンテキストメニューの作成を行うcreateContextMenuメソッドの中身を見てみよう。

  void createContextMenu(Control control) {
    MenuManager menuManager = new MenuManager();
    menuManager.setRemoveAllWhenShown(true);
    menuManager.addMenuListener(new IMenuListener() {
      public void menuAboutToShow(IMenuManager menu) {
        // メニュー項目の作成
      }
    } );
    Menu menu = menuManager.createContextMenu(control);
    control.setMenu(menu);
  }

メニューについての扱いはIMenuManagerインタフェースにより規定されているが,通常はその実装クラスであるMenuManagerクラスを用いる。まずはMenuManagerのインスタンスを生成する。
次にMenuManagerのsetRemoveAllWhenShownメソッドにtrueを渡して,コンテキストメニューが表示される直前にすべてのメニュー項目を削除するよう設定している。「表示する前に削除しちゃってどうするの?」と思うかもしれないが,もちろん削除された後すぐにメニュー項目を作成する。
MenuManagerにIMenuListenerリスナを登録しておくことで,コンテキストメニューの表示の直前にmenuAboutToShowメソッドが呼び出される。順番的には,MenuManagerによりメニュー項目が削除された後にmenuAboutToShowメソッドが呼ばれる。このmenuAboutToShowメソッド内で,メニュー項目を作成する。メニュー項目の作成方法はちょっと後回し。
あとはMenuManagerのcreateContextMenuメソッドを呼び出してMenuオブジェクトを生成し,コントロールのsetMenuメソッドに渡すことで,コンテキストメニューの作成は完了となる。

コンテキストメニューとは「状況依存のメニュー」であり,基本的には「表示前に全メニュー項目を削除し,IMenuListenerリスナ内で動的にメニュー項目を構築する」という手順を実装する。

|

« ページへのビューの表示・非表示 | トップページ | ビュー上のコンテキストメニュー(2) »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/12631/187186

この記事へのトラックバック一覧です: ビュー上のコンテキストメニュー(1):

« ページへのビューの表示・非表示 | トップページ | ビュー上のコンテキストメニュー(2) »