« ダイアログの自作 | トップページ | Javaエディタのコンテキストメニュー »

2004.07.14

ダイアログボタンの変更

前回の「ダイアログの自作」では,JFaceのDialogクラスを拡張して,独自のダイアログを作成してみた。そこでは,[OK]ボタンと[Cancel]ボタンが自動的にダイアログに追加されていることが見て取れた。しかし,場合によっては他のボタンを配置したいときもあるだろう。今回は,自作したダイアログに対して[OK][Cancel]以外のボタンを配置する方法を紹介する。

[OK]ボタンと[Cancel]ボタンの配置は,DialogクラスのcreateButtonsForButtonBarメソッドで行われている。つまり,ボタンを自作したい場合は,createButtonsForButtonBarメソッドをオーバーライドしてあげればよいボタンの作成については,createButtonメソッドが準備されているので,それをcreateButtonsForButtonBarメソッドの中で使用してあげればよい。

以下のコードは,前回の「ダイアログの自作」で取り上げたソースコードに対して追記したものである。ダイアログのボタンを[Close]ボタンに変更している。

  public class MyDialog extends Dialog {
    ...
    public static final int CLOSE_ID = 777;
    ...
    protected void createButtonsForButtonBar(Composite parent) {
      createButton(parent, CLOSE_ID, "Close", true);
    }
    protected void buttonPressed(int buttonId) {
      if (buttonId == CLOSE_ID) {
        setReturnCode(CLOSE_ID);
        close();
      } else {
        super.buttonPressed(buttonId);
      }
    }
  }

まず,[Close]ボタンのIDをCLOSE_ID定数として作成しておく。そして,オーバーライドしたcreateButtonsForButtonBarメソッドの中で,createButtonメソッドを使って[Close]ボタンを作成している。createButtonメソッドの引数は,貼り付け先のCompositeオブジェクト,ボタンのID(先ほど作ったCLOSE_ID),ボタンの表示文字列,デフォルトボタンにするかどうか,である。

createButtonsForButtonBarメソッドのオーバーライドにより,表示されるダイアログは以下のようなものになる。

my-dialog2.gif

実行してみればわかるのだが,createButtonsForButtonBarメソッドをオーバーライドしただけでは,[Close]ボタンを押下しても何も起きない。[Close]ボタンが押されたときの処理として,openメソッドの戻り値となる値をセットしてダイアログを閉じる,という動作を記載しなければならない。ダイアログ上に配置されたボタンが押されたときは,buttonPressedメソッドが呼び出されるので,その中でボタンが押された後の処理を記述する。上記のコードでは,引数に渡されたボタンのIDがCLOSE_IDであるかどうかをチェックし,もしそうだった場合はsetReturnCodeメソッドを使ってopenメソッドの戻り値となる値をセットし,closeメソッドを呼び出してダイアログを閉じている。引数の値がCLOSE_ID以外だった場合(この場合ダイアログの[閉じる]ボタンが押されたとき)は,親クラスのbuttonPressedメソッドを呼び出して処理を行わせている。

上記の例では[Close]ボタン1つだったが,もちろんcreateButtonsForButtonBarメソッドの中で複数回createButtonメソッドを使用することによって,複数のボタンを配置することも可能である。

|

« ダイアログの自作 | トップページ | Javaエディタのコンテキストメニュー »

コメント

コメントを書く



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




トラックバック

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

この記事へのトラックバック一覧です: ダイアログボタンの変更:

« ダイアログの自作 | トップページ | Javaエディタのコンテキストメニュー »