1. ホーム

[解決済み】SwingとAWTの違いは何ですか?

2022-04-03 09:22:09

質問

SwingとAWTの違いについて教えてください。

swingよりAWTの方が便利/お勧めな場合、またはその逆の場合はありますか?

解決方法は?

AWTは、OSに存在するネイティブシステムのGUIコードへのJavaインターフェースです。それは、努力はしますが、全てのシステムで同じように動作するわけではありません。

Swingは、ほぼ純粋なJavaのGUIです。AWTを使ってオペレーティングシステムのウィンドウを作り、ボタン、ラベル、テキスト、チェックボックスなどの絵をそのウィンドウに描き、マウスクリックやキー入力などのすべてに反応し、オペレーティングシステムに任せるのではなく、自分自身で何をすべきかを決めます。このようにSwingは100%ポータブルで、どのプラットフォームでも同じです(ただし、スキニングが可能で、プラグイン可能なルック&フィールがあり、ネイティブのウィンドウやウィジェットの見た目に多少似せることができます)。

これらはGUIツールキットに対するアプローチとして大きく異なるものであり、多くの結果をもたらすものです。あなたの質問に対する完全な回答は、それらすべてを探ろうとするものです。) ここでは、そのいくつかを紹介します。

AWTはクロスプラットフォーム・インターフェイスなので、OSやネイティブGUIツールキットの機能を利用するとしても、それらのツールキットができること全てにアクセスできるわけではありません。あるプラットフォームには存在するような高度で新しいAWTウィジェットが、他のプラットフォームではサポートされていないかもしれません。すべてのプラットフォームで同じでないウィジェットの機能はサポートされていないかもしれませんし、もっと悪いことには、プラットフォームごとに異なる動作をするかもしれません。例えば、Javaからネイティブコードを呼び出すなど、AWTアプリケーションをプラットフォーム間で一貫して動作させるために多くの労力を費やしてきました。

AWTはネイティブのGUIウィジェットを使用しているため、OSがウィジェットを認識し、ウィジェットを前に並べるなどの処理を行いますが、SwingのウィジェットはOSから見るとウィンドウ内の無意味なピクセルに過ぎません。Swing自体は、ウィジェットのレイアウトやスタッキングを処理します。 AWTとSwingを混在させることは、非常にサポートされておらず、例えば、ダイアログボックス内の他のすべてがSwingで作成されているため、ネイティブボタンが存在し、他のすべてを隠してしまうような馬鹿げた結果につながることがあります。

Swingは、ネイティブGUIウィンドウが提供する非常に生のグラフィックルーチン以外の、Javaで可能なことはすべて行おうとするため、かつてはAWTと比較してかなりのパフォーマンスペナルティが発生していました。そのため、Swingは残念ながら普及が遅れました。しかし、より最適化されたJVM、より高速なマシン、そして(おそらく)Swing内部の最適化により、ここ数年でこのペナルティは劇的に小さくなりました。現在では、Swingアプリケーションは十分な速度で動作し、ネイティブ・ウィジェットを使用したアプリケーションとほとんど見分けがつかないほど高速に動作します。ここまで来るのに時間がかかりすぎたと言う人もいるでしょうが、ほとんどの人はその価値は十分にあると言うでしょう。

最後に、SWT(Eclipseで使用されているGUIツールキットで、AWTとSwingの両方の代替品)をチェックするのもよいかもしれません。