ウィジェット

SWT には高性能な機能が多く含まれていますが、 システムのコアの基本知識は、有益で堅固なアプリケーションをインプリメントするために必要な、 ウィジェットレイアウト、およびイベントの 3 つです。

ウィジェット・アプリケーション構造

プラットフォーム・ワークベンチ拡張を使用して、UI エレメントを使用している場合、  SWT を開始させる操作は、ワークベンチにより処理されます。

SWT アプリケーションを最初から (ワークベンチ外で) 作成している場合は、 SWT のアプリケーション構造をさらに詳しく理解する必要があります。

典型的なスタンドアロン SWT アプリケーションは、以下のような構造になっています。

以下のコードの部分的引用は、 org.eclipse.swt.examples.helloworld.HelloWorld2 アプリケーションを基に 作成したものです。このアプリケーションは、ストリング "Hello World," を表示するだけなので、 どのウィジェット・イベントにも登録する必要はありません。

public static void main (String [] args) {
    Display display = new Display ();
    Shell shell = new Shell (display);
    Label label = new Label (shell, SWT.CENTER);
    label.setText ("Hello_world");
    label.setBounds (shell.getClientArea ());
    shell.open ();
    while (!shell.isDisposed ()) {
        if (!display.readAndDispatch ()) display.sleep ();
    }
    display.dispose ();
}

表示 (Display)

ディスプレイ は、 SWT と基礎となるプラットフォームの GUI システムとの間の接続を表します。ディスプレイは、 主に、UI スレッドとその他のスレッド間のプラットフォーム・イベント・ループおよびコントロール通信の管理のために使用されます。 (UI スレッド化問題についての完全な説明は、 『クライアントに関するスレッド化の問題』を参照してください。)

ほとんどのアプリケーションでは、上記で使用したパターンに従うことができます。ウィンドウを作成する前にディスプレイを作成し、 シェルを閉じたときにディスプレイを削除しなければなりません。マルチスレッド・アプリケーションを設計していない限り、 ディスプレイについてこれ以上のことを考える必要はありません。

シェル

シェル は、 OS プラットフォーム・ウィンドウ・マネージャーにより管理される  "ウィンドウ"です。 トップレベルのシェルは、ディスプレイの子として作成されるシェルです。これらのウィンドウは、 アプリケーションの使用中に、ユーザーが移動、サイズ変更、最小化、および最大化をするウィンドウです。 2 次シェルは、他のシェルの子として作成されるシェルです。これらのウィンドウは、 通常、ダイアログ・ウィンドウ、または別のウィンドウとの関連のみで存在する他の一過性ウィンドウとして使用されます。

親と子

トップレベル以外のすべてのウィジェットには親があります。トップレベルのシェルは親を持ちませんが、 それらはすべて特定のディスプレイ に 関連付けられて作成されます。このディスプレイには、getDisplay() を使用してアクセスすることができます。 他のすべてのウィジェットは、トップレベル・シェルの子孫 (直接的または間接的な) として作成されます。

コンポジット・ウィジェットは、子を持つことのできるウィジェットです。

アプリケーション・ウィンドウは、ルートがシェルであるウィジェット・ツリー、つまり、階層として考えることができます。 アプリケーションの複雑さによっては、シェルの子には 1 つ、またはいくつかの子があったり、 子のあるネストされたレイヤーのコンポジットがある可能性もあります。

ウィジェットのライフ・サイクル

アプリケーションがウィジェットを作成する場合、SWT は即時にその基礎となるプラットフォーム・ウィジェットを作成します。 これにより、基礎の OS ウィジェットが存在するかどうかによって異なる動作をするコードの必要がなくなります。 また、ウィジェットのデータの大部分を、ツールキットで複製するのではなく、 プラットフォーム・レイヤー内に保持することができます。したがって、ウィジェット・ライフ・サイクルのツールキットの概念は、 基礎の GUI システムの規則に準拠しなければなりません。

ウィジェットの作成

ほとんどの GUI プラットフォームでは、ウィジェット作成時に、親を指定する必要があります。SWT は、 ユーザーがツールキット・ウィジェットを作成するとすぐにプラットフォーム・ウィジェットを作成するため、 ウィジェットのコンストラクターに親ウィジェットが指定されていなければなりません。

スタイル・ビット

ウィジェット・プロパティーには、ウィジェット作成時に OS によって設定され、後で変更できないものもあります。 たとえば、リストが単一または複数の選択であるか、スクロール・バーがあるかないかなどがあります。

これらのプロパティーはスタイルと呼ばれ、コンストラクターで設定しなければなりません。 すべてのウィジェットのコンストラクターは、 すべての希望スタイルのビット単位 OR を指定する int 引き数を取ります。 場合によっては、特定のスタイルはヒントと考えられます。 つまり、すべてのプラットフォームで使用可能ではないかもしれませんが、 そのスタイルをサポートしないプラットフォーム上では無視されます。

スタイルの定数は、共用静的フィールドとして SWT クラスに位置します。 ウィジェット・クラスごとに適用できる定数のリストは、 SWT の API 解説書に含まれています。

リソースの削除

SWT の下に位置する OS プラットフォームには、OS リソースの明示的な割り振りと開放が必要です。SWT は、 ウィジェット・ツールキット内のプラットフォーム・アプリケーション構造を反映する SWT 設計哲学を保ちながら、 ユーザーが割り振った OS リソースを明示的に開放するよう要求します。SWT では、 特定のツールキット・オブジェクトと関連するリソースを開放するために dispose() メソッドが使用されます。

経験法則から、オブジェクトを作成すると、それを削除しなければなりません。 以下に、この哲学を詳しく説明する特定の基本規則を示します。

これらの規則には例外が 1 つあります。   Rectangle および Point などの 単純なデータ・オブジェクトは、オペレーティング・システムのリソースを使用しません。 これらは、 dispose() メソッドを持たないため、開放しなくても構いません。  不明確な場合は、特定クラスの javadoc を参照してください。