Standard Widget Toolkit

Standard Widget Toolkit (SWT) は、移植可能な API および、 基礎となるネイティブ OS GUI プラットフォームとの緊密な統合を提供する Java 開発者向けのウィジェット・ツールキットです。

多数の低レベル UI プログラミング・タスクが、Eclipse プラットフォームの高位層で処理されます。たとえば、 メニューおよびツールバーのコンテンツは UI 組み込み用の plugin.xml マークアップで 指定され、SWT プログラミングは不要です。 また、JFace ビューアーおよびアクションは、アプリケーションとウィジェット間の共通操作のインプリメンテーションを提供します。 ただし、基本的な SWT アーキテクチャーおよび設計方針を理解することは、 プラットフォームのそれ以外の部分の仕組みを理解するために重要です。

移植性およびプラットフォームの統合

ウィジェット・ツールキットの設計に関する一般的な問題点は、 移植可能なツールキットとプラットフォームの統合との間のバランスの取り方です。 Java AWT (Abstract Window Toolkit) は、リスト、テキスト、ボタンなどの低レベルのウィジェット用の プラットフォーム統合ウィジェットを提供しますが、ツリーやリッチ・テキストなどの高レベルの プラットフォーム・コンポーネントへのアクセスは提供しません。 したがって、アプリケーション開発者は「共通項」となる状況で作業しなければなりません。 この状況でアプリケーション開発者が使用できるのは、すべてのプラットフォームで使用可能なウィジェットのみです。

Swing ツールキットは、ツリー、テーブル、テキストなど高レベルのウィジェットの非ネイティブなインプリメンテーションを提供して、 この問題の解決を図ります。 Swing ツールキットには多くの機能が組み込まれていますが、 Swing で開発されたアプリケーションは他のアプリケーションと明確に異なります。 プラットフォームのルック・アンド・フィール・エミュレーション・レイヤーによって、 アプリケーションはプラットフォームと類似した外観になりますが、ユーザーとの相互作用は明確に異なります。 したがって、エミュレートされたツールキットを使用して、 特定の OS プラットフォーム専用に開発されたアプリケーション・パッケージに匹敵するアプリケーションを構築することは困難です。

SWT はこの問題を解決するために、サポートされているすべてのプラットフォームで提供されている共通の移植可能 API を 定義し、可能であれば、ネイティブ ・ウィジェットを使用するプラットフォームごとにこの API をインプリメントします。 これにより、ツールキットは一貫したプログラミング・モデルをすべてのプラットフォームで維持しながら、 基礎となる OS GUI のルック・アンド・フィールでの変更を直ちに反映できます。

SWT は「共通項」の問題をいくつかの方法で解決します。

プラットフォームとの一貫性

プラットフォームとの統合は、厳密にはルック・アンド・フィールの問題ではありません。 緊密に統合されているのは、ドラッグ・アンド・ドロップなどネイティブのデスクトップ・フィーチャーと 相互作用したり、OS デスクトップ・アプリケーションと統合したり、Win32 ActiveX のような OS コンポーネント・モデルにより 開発されたコンポーネントを使用する機能です。

Windows のみSWT ActiveX のサポートについては、 ActiveX Support in SWT を参照してください。

また、ネイティブ OS の開発者になじみのあるインプリメンテーションを提供することによって、コード自体で一貫性を保つことができます。 SWT は、ネイティブ C コード内で OS の違いを隠したり、 移植可能および移植不可能なレイヤーを Java インプリメンテーション内に構築したりするのではなく、 プラットフォームごとに個別に、異なる Java のインプリメンテーションを提供します。

インプリメンテーションに関する最も重要な規則の 1 つは、C のネイティブ・コードで OS に対する 呼び出しを使用して 1 対 1 のマップを行うことです。 SWT ツールキットでは、C で使用されるシステム呼び出しに直接マップされるネイティブ・コードが使用されるため、 Windows プログラマーは SWT ツールキットが Windows にインプリメントされていることを直ちに認識できます。 "プラットフォーム・マジック" が C コード内に隠されることはありません。 プラットフォーム開発者は、コードを調べることにより、 ツールキットからどのプラットフォーム呼び出しが実行されているかを正確に知ることができます。 これにより、デバッグを大幅に単純化することができます。 ネイティブ・メソッドの呼び出し時に障害が発生する場合は、C コードから同じパラメーターを使用して プラットフォーム API を呼び出しても、同じ障害が発生します。 (この問題点の詳細については、 『Java ネイティブへの SWT のインプリメンテーション戦略』を 参照してください。) 

Copyright IBM Corporation and others 2000, 2003.