Shellオブジェクトの取得
ちょっとしたことをやるにも困ってしまうEclipseプラグイン開発。今日も「こんなこと俺はできないのか・・・」とちょっと悩んでしまった。
よくGUIを伴うプログラムをやっていて,頻繁に使うクラスがある。それはJOptionPaneクラス。便利なダイアログを手軽に表示してくれる可愛い奴。メソッドが呼び出されているかどうかを確認したり,イベントの内容を表示したりするときによく使用する。System.out.println(...)でもいいんだけどね。スタティックメソッドのshowMessageDialogメソッドを良く使うんだけど,そのときには親のコンポーネントを引数に渡さなければならない。ダイアログの表示にはFrameオブジェクトが必要で,JOptionPaneクラスのshowMessageDialogメソッドは渡された親のコンポーネントのコンポジット階層を辿って,自動的にFrameクラスを見つけてくれている。親のコンポーネントにnullを渡すことも可能。
さて,Eclipseでも同じようにダイアログを表示して処理の確認を行おうと考えた。JOptionPaneクラスの代わりとなるものが,MessageDialogクラスらしい。これはjfaceのコンポーネント。これにもスタティックなメソッドのopenInformationメソッドなどを使用することによって,簡単にダイアログを表示できる。
さぁ,さくっと利用しようとしたら。。。予想通り親が必要みたい。それも,Shellオブジェクト。Shellオブジェクトって,確かアプリケーションのトップレベルのウィンドウのことだったかな。つまり,Workbenchのウィンドウのことになる。ということは,Workbench何たらってクラスかインタフェースにgetShellメソッドがあって,それから取得できるかな?と考えた。けど,getShellメソッドなんて見当たらない。。。ビュー関連のクラスからはIWorkbenchPartSiteオブジェクトからShellオブジェクトを取得できるが,それが得られない場所ではどうするのか?
結論としては,Displayクラスを利用する。現在アクティブなSellオブジェクトをDisplayクラスのgetActiveShellメソッドで取得できる。つまり,
Display.getCurrent().getActiveShell()
ってすればよいだろう。
当然これはデバッグ用ダイアログの話なので,アプリケーションダイアログはちゃんとIWorkbenchPartSteオブジェクトなどから適切なShellオブジェクトを得る必要があるだろう。
| 固定リンク
この記事へのコメントは終了しました。
コメント