(Translated by https://www.hiragana.jp/)
Standard Widget Toolkit - Wikipedia コンテンツにスキップ

Standard Widget Toolkit

出典しゅってん: フリー百科ひゃっか事典じてん『ウィキペディア(Wikipedia)』
Standard Widget Toolkit
開発元かいはつもと Eclipse Foundation
最新さいしんばん
4.23 / 2022ねん3がつ8にち (2ねんまえ) (2022-03-08)
リポジトリ ウィキデータを編集
対応たいおうOS クロスプラットフォーム
対応たいおう言語げんご Multilingual
ライセンス Eclipse Public License
公式こうしきサイト SWT: The Standard Widget Toolkit
テンプレートを表示ひょうじ

Standard Widget ToolkitSWT)は、Javaプラットフォームようウィジェット・ツールキット一種いっしゅ元々もともとIBM開発かいはつしたが、現在げんざいEclipse FoundationEclipseとも管理かんり保守ほしゅしている。サン・マイクロシステムズJava標準ひょうじゅん一環いっかんとして提供ていきょうするJavaようGUIツールキットであるAWTSwing代替だいたいするものとして開発かいはつされた。

SWTはJavaでかれている。GUI部品ぶひん表示ひょうじするため、SWTはそのオペレーティングシステム (OS) が提供ていきょうするGUIライブラリを JNI (Java Native Interface) 経由けいゆ使用しようする(これはシステム固有こゆうAPI使つか一般いっぱんてき手法しゅほうである)。SWTを使つかプログラム移植いしょくせいがあるが、ツールキット自体じたい実装じっそうはJavaでかかれているにもかかわらず、かくプラットフォーム固有こゆうである。

SWTはEclipse Public Licenseでライセンスされている。このライセンスはOpen Source Initiativeオープンソースライセンスとしてみとめている[1]

Java GUIツールキットの歴史れきし

[編集へんしゅう]

最初さいしょのJavaようGUIツールキットは、AWT (Abstract Window Toolkit) であり、サンのJava標準ひょうじゅん一部いちぶとしてJDK 1.0 で登場とうじょうした。AWTは比較的ひかくてき単純たんじゅんであり、OSが提供ていきょうするネイティブなオブジェクトをJavaコードでつつみ、メニューやボタンといったGUI部品ぶひん生成せいせいする。AWTはネイティブウィジェットラッパーとしては非常ひじょううすく、プラットフォーム固有こゆうのコードが開発かいはつしゃけてえ、バグやOS固有こゆうくせがそのままさらけされているため、ことなるプラットフォームあいだ移植いしょくせいのあるアプリケーションを作成さくせいするには限界げんかいがあった。

Swingだい世代せだいのツールキットで、サンがJ2SE 1.2で導入どうにゅうした。AWT よりもオブジェクト指向しこうてきである。SwingのGUI部品ぶひんは 100% Java であり、ネイティブコードは使つかっていない。ネイティブAPIをラップするわりに、SwingはていレベルなOSルーチンを使つかってGUI部品ぶひん自前じまえ描画びょうがする。

そのころ、IBMSmalltalk使つかった統合とうごう開発かいはつ環境かんきょう (IDE) であるVisualAge開発かいはつしていた。これをオープンソースとして公開こうかいすることにめ、それがEclipseの開発かいはつへとつながっていった。EclipseはMicrosoft Visual StudioのようなIDEとも競合きょうごうできるものとすることを目的もくてきとしていた。EclipseはJavaでかれており、IBMの開発かいはつしゃらは「ネイティブのルック・アンド・フィール」と「ネイティブの性能せいのう」をったツールキットが必要ひつようかんがえ、Swingを置換ちかんするものとしてSWTを開発かいはつした。

設計せっけい

[編集へんしゅう]

SWTは、GTKオブジェクトやMotifオブジェクトなど、ネイティブのコードオブジェクトのラッパーである。そのため、SWTウィジェットは「おもい」ネイティブオブジェクトにかるいJavaラッパーをかぶせたようなイメージで「おもい」とわれることがおおい。SWTが必要ひつようとする機能きのうをネイティブのGUIライブラリっていない場合ばあい、SWTはSwingのように独自どくじのGUIコードをJavaで実装じっそうしている。SWTは本質ほんしつてきには、AWTの性能せいのうやルック・アンド・フィールとSwingのそれとの中間ちゅうかんにあるとえる。

Eclipse Foundationによれば、SWTとSwingは目標もくひょうことなることなったツールである。SWTの目的もくてきは、各種かくしゅプラットフォームのネイティブウィジェットにアクセスできる共通きょうつうAPIを提供ていきょうすることである。設計せっけい目標もくひょうだいいち高性能こうせいのうなネイティブのルック・アンド・フィールとプラットフォーム統合とうごう達成たっせいである。一方いっぽうSwingは高度こうどにカスタマイズ可能かのうぜんプラットフォームに共通きょうつうなルック・アンド・フィールの提供ていきょうにある。

SWTはSwingに比較ひかくすると単純たんじゅんなツールキットであり、標準ひょうじゅんてき開発かいはつ無関係むかんけい機能きのうはあまり存在そんざいしない[2]。このため、SWTがSwingにくらべて機能きのうすくないと批判ひはんするひともいる[3]

Javaの設計せっけいしゃであるジェームズ・ゴスリンは、SWTが単純たんじゅんすぎ、AWTとおな理由りゆうあらたなプラットフォームへの移植いしょくむずかしいと主張しゅちょうした。単純たんじゅんすぎ、ていレベルすぎ、Win32 GUI APIとむすびつきすぎているため、Motif やOS X CarbonといったほかのGUIツールキットへの対応たいおうむずかしいとした[2]

developer.comにてMauro Marinilliaは「SWTはSwingに比較ひかくすると単純たんじゅんすぎるようにえる。Swingはおおくの洗練せんれんされた機能きのうっているから(たとえば、精巧せいこうなSwingクラス階層かいそう交換こうかん可能かのうなルック・アンド・フィール、Model View Controller手法しゅほうなど)」と主張しゅちょうした。これにたいして、Model View Controllerのような複雑ふくざつ問題もんだい一種いっしゅ強制きょうせいてきただしい手法しゅほう適用てきようすることはいことだとおもひともいるだろう。Marinilliaはさらに「(SWTと比較ひかくして)Swingの提供ていきょうする機能きのう豊富ほうふ洗練せんれんされており、抽象ちゅうしょうレベルがたかい(そのため、特製とくせいのGUI部品ぶひん複雑ふくざつなGUIを構築こうちくするのが容易よういである)」とつづけ、「一般いっぱんにSWTはとっつきやすいが、複雑ふくざつなGUIをそれで構築こうちくしようとすると、Swingのほうがより柔軟じゅうなん容易ようい結果けっかむ」とした[よう出典しゅってん]

SWTは Swing そのこうレベルなGUIツールキットが提供ていきょうする Model View Controller アーキテクチャを実装じっそうしていないが、Eclipse プロジェクトの1つとして開発かいはつされた JFace ライブラリがプラットフォームに依存いぞんしない高度こうどな Model View Controller をSWTじょう実装じっそうしている。開発かいはつしゃは、ツリー/テーブル/リストのような複雑ふくざつなSWTコントロールについて、JFaceが提供ていきょうする柔軟じゅうなん抽象ちゅうしょうデータモデルを使つかうこともできるし、SWTのコントロールを直接ちょくせつ使つかうこともできる。

性能せいのう

[編集へんしゅう]

SWTは「高性能こうせいのう」GUIツールキットとして、Swingよりもシステムリソースを浪費ろうひしないよう設計せっけいされた[4]。SWTとSwingのベンチマーク比較ひかくがいくつかおこなわれ、SWTがSwingより効率こうりつがよいことがしめされている。しかし、ベンチマークに使つかわれたアプリケーションはそれほど複雑ふくざつではなく、SWTがつねにSwingより性能せいのういとはえない[5]

ルック・アンド・フィール

[編集へんしゅう]

SWTウィジェットは、ネイティブウィジェットとおなルック・アンド・フィール提供ていきょうする。これとは対照たいしょうてきに、Swingのウィジェットはネイティブウィジェットにちか複製ふくせいである。場合ばあいによっては、このちがいがにもあきらかとなる。たとえば、Mac OS Xのツリーウィジェット機能きのうはツリーの展開てんかいにアニメーションをおこない、デフォルトボタンもユーザーがフォーカスしたさいにアニメーションをおこなう。Swingでは、これらのアニメーションはおこなわれない。

SWTはネイティブGUIコードの単純たんじゅんなラッパーであるため、(ネイティブAPIが互換ごかんたもかぎり)ネイティブコードが変更へんこうされてもおおきな修正しゅうせい必要ひつようとしない。OSベンダーはAPIじょう互換ごかんせいたもつようつねをつけている。Swingでは事情じじょうことなる。Swing は動作どうさちゅうのアプリケーションのルック・アンド・フィールを交換こうかん可能かのうであり、ネイティブGUIのテーマをエミュレート可能かのうである。この機能きのうはOSのGUIが変更へんこうされるたびに、その変化へんか(テーマやそののルック・アンド・フィールの更新こうしん)を反映はんえいしなければならない。ぎゃくえば、ネイティブAPIが変更へんこうされれば、SWTは修正しゅうせい必須ひっすとなるが、Swingは修正しゅうせい必要ひつようがない。

SWT は「プラットフォームとのみつ統合とうごう」を目指めざしており、ネイティブウィジェットを利用りようする。developer.com の Mauro Marinilliaによると「ネイティブプラットフォームとのみつ統合とうごう必要ひつようなら、SWTはよい選択せんたくだ」としている[6]。このようなみつ統合とうごう利点りてんかしたれいとして、SWTは Microsoft WindowsActiveXオブジェクトもラップ可能かのうである。

拡張かくちょうせいの Java コードとの比較ひかく

[編集へんしゅう]

ネイティブコードを利用りようするため、SWTクラスではぜんウィジェットクラスについて、継承けいしょう容易よういにはゆるされない。このため、拡張かくちょうせい問題もんだいがあるとするひともいる[6]。このてんではSwingのほう容易よういにカスタマイズ可能かのうである。どちらのツールキットもあらたなウィジェットをJavaコードだけを使つかってくことができる。

SWTはAWT同様どうよう手動しゅどうでオブジェクトの解放かいほうをする必要ひつようがある。SwingやJavaのメモリ自動じどうガベージコレクションとはことなる。close() しないといけないI/Oリソースとおなじである。SWTオブジェクトは "dispose()" メソッドを使つかって明示めいじてき解放かいほうする必要ひつようがあり、C言語げんごの "free" にている[7]。これをしないと、メモリリークなどのこのましくない結果けっかしょうじる。ただし、親子おやこ関係かんけいにある Widget はおやを dispose() すれば、も dispose() される。この問題もんだいについて、「リソースの明示めいじてき解放かいほう必要ひつようせいは、すくなくとも平均へいきんてきなJava開発かいはつしゃにとっては、開発かいはつ時間じかんとコストに悪影響あくえいきょうおよぼす」とのコメントもある。さらに「これはありがた迷惑めいわくである。Swingがより自動じどうされおそいのにたいして、SWTはよりきめこまかいコントロールができるが複雑ふくざつになる」としている[6]。SWTが手動しゅどうでのオブジェクト解放かいほう必要ひつようとするのは、ネイティブオブジェクトを使つかっているのがおも原因げんいんである。つまり、それらオブジェクトは Java VM の管理かんり範囲はんいがいにあり、Java VM からそれらが解放かいほう可能かのうかどうかを判断はんだんできない。

プラットフォームサポート

[編集へんしゅう]
GTK+環境かんきょうでの Azureus BitTorrent クライアント

SWTはプラットフォーム固有こゆうのGUIライブラリへのラッパーであるため、Javaが動作どうさするプラットフォームすべてで動作どうさするとはかぎらない。つまり、SWTはGUIライブラリごと移植いしょく必要ひつようであり、Javaがあらたなプラットフォームに移植いしょくされても、即座そくざにSWTが移植いしょくされるとはかぎらない(Swing や AWT はJava本体ほんたい一部いちぶだが、SWTはそうではない)。また、Windows じょうのSWT以外いがいは、比較的ひかくてき効率こうりつわるいとわれている[3]。SWTはプラットフォームごとことなるネイティブライブラリを使つかっているため、プラットフォーム固有こゆうのバグもSWTではそのまま存在そんざいしている。

SWTはSwingよりもていレベルな詳細しょうさい開発かいはつしゃ提示ていじする。これはSWTがネイティブライブラリで提供ていきょうされるGUI機能きのううえそうであるためであり、ネイティブGUIコードを開発かいはつしゃ提示ていじするのも意図いとてきおもわれる。SWTの目的もくてきは、高度こうどなユーザインタフェース設計せっけいフレームワークを提供ていきょうすることではなく、可能かのうかぎ多数たすうのプラットフォームでうすいユーザインタフェースAPIを提供ていきょうし、そのうえ高度こうどなGUIアプリケーションを構築こうちくできるだけの機能きのう提供ていきょうすることである。

SWTの実装じっそうはプラットフォームごとことなるので、複数ふくすうのプラットフォーム対応たいおうとしてアプリケーションを配布はいふするさいには、プラットフォームごとのSWT(JARファイル)が必要ひつようになる。

SWTはJavaクラスライブラリ必要ひつよう最小さいしょうげんしか使つかっていないため、ふるいJDK(たとえば 1.1.8)でも動作どうさするし、Javaクラスライブラリを完全かんぜん実装じっそうしていない携帯けいたい機器ききでも動作どうさするとわれている[よう出典しゅってん]

2006ねん3がつ現在げんざい、SWTがサポートされているプラットフォーム/GUIライブラリはつぎとおりである。

SWTアプリケーション

[編集へんしゅう]

SWTを利用りようしているアプリケーションとして、以下いかのものがある。

SWT関係かんけい文書ぶんしょ

[編集へんしゅう]

GUIツールキットとしてはSwingよりもあたらしいため、SWT関連かんれん文書ぶんしょ/書籍しょせきはSwingにくらべてすくない[よう出典しゅってん]

SWT: The Standard Widget Toolkit は、Eclipse Foundation推薦すいせんのSWT解説かいせつしょである[8]ほかにもSWT関連かんれん書籍しょせきとして以下いかのものがある。

  • Rob Warner, Robert Harris (2004ねん). The definitive guide to SWT and JFace. Apress 
  • Eric Clayberg and Dan Rubel (2004ねん). Eclipse: Building commercial-quality plug-in. Addison-Wesley 
  • Erich Gamma and Kent Beck (2004ねん). Contributing to Eclipse. Addison-Wesley 
  • Sherry Shavor et al (2004ねん). The Java Developers Guide to Eclipse. Addison-Wesley 

ウェブじょうでのSWT

[編集へんしゅう]

Eclipseコミュニティでの最近さいきん[いつ?]うごきとして、SWT(とJFace)をウェブけのウィジェットツールキットとして移植いしょくしようとしている。Eclipse RAP [9] (Rich Ajax Platform) はQooxdoo AJAX ライブラリとSWT APIをわせたものである。のJava AJAX プロジェクト(Echo2やGWT)と同様どうよう、SWT APIを使つかうことで、デスクトップとおながたでWebようのアプリケーション開発かいはつ可能かのうとなる。

開発かいはつ

[編集へんしゅう]

Eclipseが人気にんきてきた結果けっかとして、SwingとSWTをある意味いみで「統合とうごう」しようとする活動かつどうもある。

SwingとSWTの統合とうごうについては、以下いかのようにいくつかのことなる手法しゅほう存在そんざいしている。

  • Eclipseプロジェクトでは、SwingウィジェットをSWTコンテナウィジェットにもうとしている[よう出典しゅってん]
  • SwingWTはSwing APIの代替だいたい実装じっそう提供ていきょうしようとするプロジェクトである。その1つとしてSWTじょうでSwingウィジェットを使つかえるようにするプロジェクトがおこなわれている[10]
  • SWTSwingは、ぎゃくに Swing じょうで SWT API を提供ていきょうするプロジェクトである。これによりSWTがサポートされていないプラットフォームじょうでもJavaさえ動作どうさすればSWTアプリケーションを実行じっこう可能かのうとなる[11]

脚注きゃくちゅう

[編集へんしゅう]
  1. ^ Open Source Initiative. “Licenses By Name”. 2007ねん3がつ24にち閲覧えつらん
  2. ^ a b Ella Morton. “James Gosling Q & A”. 2007ねん3がつ24にち閲覧えつらん
  3. ^ a b Performance Benchmarks of Nine Languages”. 2007ねん3がつ24にち閲覧えつらん
  4. ^ Akan, Ozgur (2004ねん11月19にち). “Why I choose SWT against Swing”. 2006ねん11月7にち閲覧えつらん
  5. ^ Swing vs. SWT Performance - Have a Look at the Call Stacks Javalobby、StephenStrenn、2006ねん3がつ3にち
  6. ^ a b c Marinilli, Mauro. “Swing and SWT: A Tale of Two Java GUI Libraries”. 2006ねん11月7にち閲覧えつらん
  7. ^ The Java developers guide to Eclipse, 2nd ed., p359
  8. ^ Steve Northover, Mike Wilson. SWT: The Standard Widget Toolkit. Addison-Wesley 
  9. ^ Rich Ajax Platform (RAP)
  10. ^ SwingWT
  11. ^ swtswing

外部がいぶリンク

[編集へんしゅう]