SWT

標準ウィジェット・ツールキット(SWT)は、基礎をなすネイティブなウィンドウ・システムとの緊密な統合を可能にするように実装されたウィジェットとグラフィックスのための普遍的なOS非依存のAPIを提供します。 イクリプセ・プラットフォームUI全体、およびそれにプラグインするツールはユーザに情報を提示するためにSWTを使用します。

ウィジェット・ツールキットの設計における絶えることのない論争の1つはポータブルなツールキットとネイティブなウィンドウ・システムとのインテグレーションの間の対立です。 Java AWTは、リスト、テキストフィールドおよびボタンのような低レベルのウィジェットを提供しますが、ツリーまたはリッチテキストのような高レベルのウィジェットを提供しません。 AWTウィジェットは、すべてのウィンドウ・システム上のネイティブなウィジェットで直接に実装されます。 AWTだけを使用して、UIを構築することは、すべてのOSのウィンドウ・システムの最小公倍数となるプログラミングを意味します。

Java Swingツールキットは、ツリー、テーブルおよびリッチテキストのようなウィジェットのエミュレートにより、この問題に取り組みます。 Swingは、さらにアプリケーションを基礎をなすネイティブなウィンドウ・システムのように見せることを試みるルック・アンド・フィール・エミュレーション層を提供します。 しかしながら、エミュレートされたウィジェットは、常にネイティブなウィジェットのルック・アンド・フィールより遅く、 通常はエミュレートされたウィジェットとのユーザ対話はかなり異なっているので、 特に特定のネイティブなウィンドウ・システムのために開発された市販のアプリケーションと真っ向から競合するアプリケーションを構築することを困難にしています。

SWTは、サポートされた多くのウィンドウ・システムで横断的に利用可能な普遍的なAPIを定義することでこの問題に取り組みます。 個々の異なるネイティブなウィンドウ・システムについて、可能な限りSWTの実装はネイティブなウィジェットを使用します; ネイティブなウィジェットが利用可能でないところでは、SWTの実装は適切なエミュレーションを提供します。 リスト、テキストフィールドおよびボタンのような一般的な低レベルのウィジェットは、必然的にどこででもインプリメントされています。

しかし、いくつかの一般に有用なより高レベルのウィジェットはいくつかのウィンドウ・システム上ではエミュレートされる必要があるかもしれません。 例えば、SWTツールバー・ウィジェットは、ウインドウズ上のネイティブなツールバー・ウィジェットとして、およびMotif(R)の上のエミュレートされたウィジェットとして実装されます。 この戦略は、ネイティブなウィンドウ・システムのルック・アンド・フィールが最大限に活用されると同時に、SWTがすべての環境中で一貫したプログラミング・モデルを維持することを可能にします。 SWTはまた、特定の基礎をなすネイティブなウィンドウ・システムが他のウィンドウ・システム上では利用不可能なユニークで重要な機能を提供する場合にはネイティブなウィンドウ・システムに特有のAPIを露出します。 ウインドウズActiveX(R)はこのよい例です。 それが本質的にポータブルでないという事実を示すために、ウィンドウ・システムに特有のAPIは適切に命名されたパッケージへ分離されています。 ネイティブなウィンドウ・システムとの緊密な統合は厳密にはルック・アンド・フィールの問題ではありません。

SWTは、さらにドラッグ・アンド・ドロップのようなネイティブなデスクトップ機能と対話し、ウインドウズActiveXコントロールのような、OSの構成要素のモデルで開発されたコンポーネントを使用することができます。 内部的には、SWTの実装はJavaで個々のネイティブなウィンドウ・システムに個別の実装を供給します。 Javaのネイティブなライブラリは、それぞれのウィンドウ・システムに特有のAPIの境界で完全に異なっています。 (これとJava AWTを比較してください。それは、ウィンドウ・システムの違いを普遍的なJavaのネイティブメソッドのセットのCコード実装に置きます。)

ネイティブの中にはいかなる特別なロジックも入れられていないので、SWTの実装は完全にJavaコード中で表現されます。 しかしながら、JavaコードはネイティブなOSでの開発者にもよく知られているように見えます。 どんなウインドウズ・プログラマも、それがCでのプログラミングから彼らが既に知っているウインドウズAPIへの呼出しから成るのでウインドウズのためのSWTのJavaの実装を即座に見つけるでしょう。 モチーフのためのSWTの実装を探すモチーフ・プログラマでも同様でしょう。 この戦略はSWTを実装し、デバッグし、維持することを非常に簡単にします。なぜなら重要な開発をすべてJavaで行うことを可能にするからです。 もちろん、これらのネイティブがウィンドウ・システム非依存のSWT APIの後ろに完全に隠されるので、これはSWTの通常の利用者にとって直接的な問題ではありません。