TOP設計・移行・活用> はじめに
Eclipse実践プラグイン開発
Eclipse実践プラグイン開発

第3回:基本的なGUIコンポーネントの利用
著者:ビーブレイクシステムズ  大森 洋行   2005/7/15
1   2  3  4  次のページ
はじめに

   今回から2回に渡って、グラフィカルなプラグインを作成するときに必要となるStandard Widget Toolkit(以降、SWT)とJFaceのGUIコンポーネントについて説明します。

   SWTの大きな特徴は、OSネイティブに実装されているため動作が高速という点です。高速な動作を実現するためにマルチプラットフォームというJavaの思想から外れているため、一時期は一部のエンジニアから非難の声も聞こえていましたが、Eclipseの広まりと共にそのような声もなくなってきました。

   JFaceはSWTの利用を補助するフレームワークで、内部的にSWTのコンポーネントを利用しています。

   ここではGUIコンポーネントを中心に説明し、SWTのレイアウトマネージャについて説明しません。好みの問題もありますが、レイアウトマネージャを使用するとソースの可読性が落ちてしまうため、筆者がプラグインを作成するときはどうしても必要な場合を除き、レイアウトマネージャは使用せずに座標指定でGUIコンポーネントを配置するようにしています。

   今回はSWTで提供されているコンポーネントを使用して、グラフィカルなプラグインを作成するときの基本から便利なテクニックについて説明します。

   なおSWT/JFaceのAPIドキュメントは、Eclipseをインストールしたディレクトリのplugins/org.eclipse.platform.doc.isv_*/doc.zipを展開し、reference/apiから参照するか、またはヘルプの「Platform プラグイン・デベロッパー・ガイド」から参照できます。ここで紹介する以外のコンポーネントや利用方法については、そちらを参照してください。


リソースの扱いに関する注意点

   SWT/JFaceでは、OSのリソースを使用してフォントやイメージ、カラーを割り当てているため、そのままではガベージコレクションの対象にならず、使用したリソースは、disposeメソッドを使用して明示的に開放する必要があります。

   JFaceでは、これらの煩雑になりがちなリソースの開放処理を補助するために、フォントにはorg.eclipse.jface.resource.FontRegistryクラス、イメージにはorg.eclipse.jface.resource.ImageRegistryクラス、カラーにはorg.eclipse.jface.resource.ColorRegistryクラスといったクラスが用意されています。

   各Registryクラスを使用する場合には、使用するリソースとキーワードをputメソッドであらかじめ設定しておき、使用するときにRegistryクラスからgetメソッドでリソースを取得して使用します。Registryクラスに登録されたリソースはorg.eclipse.swt.widgets.Displayクラスのdisposeメソッドが呼ばれたタイミング(アプリケーションの終了時)に自動的に開放されるため、リソースの開放を意識する必要がなくなります。

   ただしアプリケーションの動作中はリソースが確保されたままになるため、一時的に使用するリソースについては、Registryクラスを使用しない方が良い場合もあります。
GUIコンポーネント

   Swingの使用経験がある方は違和感を持つと思いますが、SWTでGUIコンポーネントを作成する場合は、インスタンスを生成するときに親のコンポジットとスタイルを指定します。またスタイルの指定を変えることで、たとえばButtonクラスからチェックボックスやラジオボタン、トグルボタンといった様々なボタンを生成し、コンポーネントの振る舞いを変えることができます。

   作成したGUIコンポーネントにアクションを設定する場合は、Swingの場合と同様にリスナーを作成して、コンポーネントに追加します。たとえばボタンをクリックしたときのアクションを設定する場合には、以下のリストのようにorg.eclipse.swt.events.SelectionListenerインターフェイスをインプリメントしたButtonActionAdapterクラスを作成し、addSelectionListener(new ButtonActionAdapter());でリスナを追加します。

   またSWTではインターフェイスとしてのリスナーだけでなく、リスナーのメソッドを空で実装したアダプタクラスも用意されています。アダプタクラスを継承することですべてのメソッドをオーバーライドする必要がなくなり、ソースコード上に不要なメソッドの記述が現れることを防ぐことができます。

⁄**
 * ボタンクリック時のアクションクラス(リスナー利用の場合)
 *⁄
class ButtonActionAdapter implements SelectionListener {

   public void widgetSelected(SelectionEvent e) {
       Button source = (Button)e.getSource();
       source.setText("Clicked");
   }

   public void widgetDefaultSelected(SelectionEvent e) {
   }
}
⁄**
 * ボタンクリック時のアクションクラス(アダプタ利用の場合)
 *⁄
class ButtonActionAdapter extends SelectionAdapter {

   ⁄⁄ 必要なメソッドのみ記述
   public void widgetSelected(SelectionEvent e) {
        Button source = (Button)e.getSource();
        source.setText("Clicked");
   }

}

   それでは、SWTで提供されている代表的なGUIコンポーネントとその利用方法について見ていきましょう。


ラベル(Label)

   SWTのorg.eclipse.swt.widgets.Labelクラスは、SwingのJLabelに対応します。スタイルを変更することで、以下のような様々な種類のラベルを作成できます。

テキストラベル


Label textLabel = new Label(parent, SWT.BORDER | SWT.CENTER);
textLabel.setText("TextLabel");
textLabel.setBounds(x, y, width, height);

垂直セパレータラベル


Label verticalSeparatorLabel = new Label(parent, SWT.VERTICAL | SWT.SEPARATOR);
verticalSeparatorLabel.setBounds(x, y, width, height);

水平セパレータラベル


Label horizontalSeparatorLabel = new Label(parent, SWT.HORIZONTAL | SWT.SEPARATOR);
horizontalSeparatorLabel.setBounds( x, y, width, height);
1   2  3  4  次のページ


ビーブレイクシステムズ社 大森 洋行
著者プロフィール
ビーブレイクシステムズ社  大森 洋行
中堅システム開発会社にて、データベース検索ソフトの開発・導入コンサルティング・セミナー講師に従事。その現場の中で、Java及びオープンソースを用いたシステム開発は今後のシステム開発の主流になると考え、それらを独学で学ぶ。本格的にそれらを用いた開発に携わるため、ビーブレイクシステムズに入社。現在、データ項目やその流れの分析に重点をおきながら、Javaやオープンソースを用いたシステム開発に携わる。


INDEX
第3回:基本的なGUIコンポーネントの利用
はじめに
  ボタン(Button)
  リスト(List)
  スライダー(Slider)