[解決済み】SwingとAWTの違いは何ですか?
質問
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の両方の代替品)をチェックするのもよいかもしれません。
関連
-
[解決済み] JVM起動時のパラメータ「-Xms」「-Xmx」とは何ですか?
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Javaにおけるpublic、protected、package-private、privateの違いは何ですか?
-
[解決済み] JavaでArrayListではなくLinkedListを使用するのはいつですか?
-
[解決済み] JavaBeanとは何ですか?
-
[解決済み] なぜゲッターとセッター/アクセッサーを使うのですか?
-
[解決済み] StringBuilderとStringBufferの違いについて
-
[解決済み] Javaクラスにおけるcanonical name、simple name、class nameの違いは何ですか?
-
[解決済み] JDKとJREの違いは何ですか?
-
[解決済み】HashMap、LinkedHashMap、TreeMapの違いについて
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] ストリングビルダー.イコール Java
-
[解決済み] この配列の中の数字を入れ替えるには、何が足りないのでしょうか?ジャバ
-
[解決済み] コレクションへの共有参照が見つかりました org.hibernate.HibernateException
-
[解決済み] java.util.concurrent.ExecutionException 例外をどのように処理しますか?
-
[解決済み] Oracle DB : java.sql.SQLException: 閉じた接続
-
[解決済み] Eclipse- Dynamic Web Module 3.0 で新しいプロジェクトを作成するときに Java 1.6 以降が必要なエラーが発生する。
-
[解決済み] JavaにおけるMouseListenerとMouseAdapterの違いについて
-
[解決済み] Apache Camelのログに簡単なテキストを記録する
-
[解決済み] JDBC タイプの方言マッピングがありません。1111
-
[解決済み] publicId と systemId の間に空白が必要です。