複雑なユーザー・インターフェースを作成するために、 多くのクラスおよびインターフェースのセットを利用することができます。幸いにも、これらをすべて理解していなくても、 単純な作業を行えます。ここでは、最初に、 ワークベンチのユーザー・インターフェースに見られる概念と、その対応する構造について説明します。
ワークベンチ とは、大ざっぱに言うと、「プラットフォームの始動時に開くウィンドウ」のことです。 もう少し詳しくワークベンチを構成するビジュアル・コンポーネントの一部を見てみましょう。
以後の説明において、用語「ワークベンチ」は、ワークベンチ・ウィンドウ (IWorkbenchWindow) を指します。 ワークベンチ・ウィンドウは、ワークベンチにおける最上位のウィンドウです。これは、 メニュー・バー、ツールバー、状況表示行、ショートカット・バー、およびページを含むフレームです。 通常、ワークベンチ・ウィンドウをプログラミングする必要はありません。ウィンドウを確認するだけで十分です。
注: 「パースペクティブ (Perspective)」->「開く (Open)」と選択することにより、 複数のワークベンチ・ウィンドウを開くことができます。 デフォルトでは、同じワークベンチ・ウィンドウに新しいパースペクティブが開きます。 その他のオプションが使用可能です (詳しくはワークベンチの設定ページを参照)。 各ワークベンチ・ウィンドウは、エディターやビューを含む完結したウィンドウであるため、 ここでは、単一のワークベンチ・ウィンドウにのみフォーカスを当てます。
ユーザーから見たワークベンチには、ビューおよびエディターが含まれています。 その他にも、ワークベンチ・ウィンドウをインプリメントするために使用されるクラスがいくつかあります。
ワークベンチ・ウィンドウの内部には、 パーツを含む 1 つ以上のページ (IWorkbenchPage) があります。 ページは、パーツをグループ化するためのインプリメンテーション・メカニズムです。 通常、ページはプログラミングの必要はありませんが、プログラミングおよびデバッグの観点から参照します。
注: ページは、パースペクティブのインプリメンテーションで使用されます。これにより、 パースペクティブが同じワークベンチ・ウィンドウまたは新しいワークベンチ・ウィンドウのどちらで開いているかにかかわらず、 ワークベンチ・パーツを外部コンテナーに配置することができます。
ビューおよびエディターについては、 インプリメンテーションの詳細だけでなく、共通のプラグイン・プログラミングについても説明します。 ワークベンチにビジュアル・コンポーネントを追加する場合、 ビューまたはエディターをインプリメントするかどうかを決める必要があります。 これは、次のようにして決定します。
いずれの場合も、共通のライフ・サイクルに応じてビューまたはエディターを作成します。
ビジュアル・コンポーネントを表す SWT ウィジェットを作成するには、 createPartControl メソッドをインプリメントします。 使用するウィジェットを決めて、ビューまたはエディターの表示に必要な関連 UI リソースを割り振る必要があります。
ビューまたはエディターをフォーカスすると、 適切なウィジェットをフォーカスできるよう setFocus 通知を受け取ります。
ビューまたはエディターを閉じる場合は、閉じている途中であることを示す dispose メッセージを受け取ります。 この時点で createPartControl に割り振られたコントロールは既に廃棄済みとなりますが、 コントロールの作成またはウィジェット・イベントへの応答の際に割り振った グラフィックス・リソース (カーソル、アイコン、またはフォントなど) の処理を行う必要があります。
このライフサイクルを通じて、含んでいるワークベンチ・ページからはイベントが発行され、 ビューおよびエディターを開いたり、活動化、非活動化、および閉じることについて関係するパーティーに通知が行われます。
このように単純な点がワークベンチのビューおよびエディターの利点です。 ビューやエディターはウィジェットのホルダーであり、必要に応じて、単純化、または複雑化することができます。 ハロー・ワールド・ビューを作成した前の例では、最も単純なビューを参照しました。 内容の詳細を説明したので、ここでもう一度見てみましょう。
package org.eclipse.examples.helloworld;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.SWT;
import org.eclipse.ui.part.ViewPart;
public class HelloWorldView extends ViewPart {
Label label;
public HelloWorldView() {
}
public void createPartControl(Composite parent) {
label = new Label(parent, SWT.WRAP);
label.setText("Hello World");
}
public void setFocus() {
// set focus to my widget. For
a label, this doesn't
// make much sense, but for more
complex sets of widgets
// you would decide which one gets
the focus.
}
}
ここで dispose() メソッドをインプリメントする必要なかったことに注意してください。 これは、createPartControl(parent) メソッドでラベルの作成のみを行っているためです。 イメージやフォントなどの UI リソースを割り振った場合には、ここでその廃棄を行うことになります。 ViewPart クラスを拡張しているため、 dispose() の「何も行わない」インプリメンテーションを継承しています。