回答:
AWTは、OSに存在するネイティブシステムGUIコードへのJavaインターフェイスです。試しても、すべてのシステムで同じように機能するわけではありません。
Swingは多かれ少なかれ純粋なJava GUIです。AWTを使用してオペレーティングシステムウィンドウを作成し、ボタン、ラベル、テキスト、チェックボックスなどの画像をそのウィンドウに描画し、すべてのマウスクリック、キーエントリなどに応答して、何をすべきかを決定します。オペレーティングシステムに処理を任せる代わりに。したがって、Swingは100%移植可能であり、プラットフォーム間で同じです(ただし、スキンを変更でき、「プラグイン可能なルックアンドフィール」を備えているため、ネイティブのウィンドウやウィジェットの外観に似ています)。
これらはGUIツールキットへの非常に異なるアプローチであり、多くの結果をもたらします。あなたの質問に対する完全な答えは、それらすべてを探求しようとするでしょう。:)ここにカップルがあります:
AWTはクロスプラットフォームのインターフェースであるため、基盤となるOSまたはネイティブGUIツールキットを機能に使用しても、それらのツールキットが実行できるすべての機能にアクセスできるわけではありません。あるプラットフォームに存在する可能性のある高度または新しいAWTウィジェットは、別のプラットフォームではサポートされない場合があります。すべてのプラットフォームで同じではないウィジェットの機能がサポートされていない場合や、さらに悪いことに、各プラットフォームで動作が異なる場合があります。AWTアプリケーションをプラットフォーム間で一貫して機能させるために多くの労力を費やしていました。たとえば、Javaからネイティブコードを呼び出そうとする場合があります。
AWTはネイティブGUIウィジェットを使用するため、OSはそれらを認識し、それらを互いの前に配置するなどの処理を行いますが、SwingウィジェットはOSの観点からはウィンドウ内の無意味なピクセルです。Swing自体がウィジェットのレイアウトとスタックを処理します。AWTとSwingの混在は非常にサポートされておらず、他のすべてがSwingで作成されたために、それらが存在するダイアログボックス内の他のすべてを覆い隠すネイティブボタンなど、とんでもない結果につながる可能性があります。
Swingは、ネイティブGUIウィンドウによって提供される非常に生のグラフィックルーチン以外のJavaで可能なすべてのことを実行しようとするため、AWTに比べてパフォーマンスが大幅に低下していました。これにより、Swingは残念ながら遅れを取りました。ただし、JVMの最適化、マシンの高速化、および(おそらく)Swing内部の最適化により、この数年間で劇的に減少しています。今日、Swingアプリケーションは十分に高速で実行可能であり、サービス可能であるか、さらには不安定であり、ネイティブウィジェットを使用するアプリケーションとほとんど区別がつきません。この時点までに時間がかかりすぎると言う人もいるでしょうが、ほとんどの人はそれだけの価値があると言っています。
最後に、SWT(Eclipseに使用されるGUIツールキットであり、AWTとSwingの両方の代替手段)もチェックすることをお勧めします。これは、Javaを介してネイティブウィジェットにアクセスするというAWTの考え方に少し戻っています。
すでに誰もが言及している基本的な違いは、一方が重量であり、他方が軽量であるということです。基本的に、ヘビーウェイトという用語の意味は、awtコンポーネントを使用している場合、ビューコンポーネントを取得するために使用されるネイティブコードがオペレーティングシステムによって生成されることです。そのため、OSからOSにルックアンドフィールが変更されます。Swingコンポーネントの場合と同様に、コンポーネントのビューを生成するのはJVMの責任です。私が見た別のステートメントは、swingはMVCベースであり、awtはそうではないということです。
Swing vs AWT。基本的にAWTが最初に来て、ヘビー級のUIコンポーネントのセット(オペレーティングシステムオブジェクトのラッパーであることを意味します)であるのに対し、Swingは、AWTの上に構築され、豊富な軽量コンポーネントのセットを備えています。
深刻なJava UIの作業はすべてAWTではなくSwingで行われ、主にアプレットに使用されていました。
SwingよりもAWTの方が役立つ場合がある限り-
AWTとSwingのこの違いにより、いくつかの結果が生じます。
AWTはOSの上にあるコードの薄い層ですが、Swingははるかに大きいです。Swingの機能も非常に豊富です。AWTを使用すると、Swingに組み込みのものがある一方で、多くのことを自分で実装する必要があります。GUIを多用する作業の場合、AWTはSwingに比べて非常に原始的に動作します。SwingはホストOSに依存するのではなく、GUI機能自体を実装するため、Javaが実行されるすべてのプラットフォームでより豊かな環境を提供できます。AWTは、すべてのプラットフォームが同じように見えるコントロールを同じ方法で実装しているわけではないため、すべてのプラットフォームで同じ機能を提供することがより制限されています。
Swingコンポーネントは、機能を実装するためにネイティブOSオブジェクトを必要としないため、「軽量」と呼ばれます。JDialog
そしてJFrame
、彼らは仲間を持っているので、ヘビー級です。コンポーネントが好きなのでJButton
、
JTextArea
彼らはOSピアを持っていないので、など、軽量です。
ピアは、ボタンオブジェクトまたは入力フィールドオブジェクトとしてオペレーティングシステムによって提供されるウィジェットです。
AWT 1。AWTはより多くのメモリ空間を占有します2。AWTはプラットフォームに依存します3。AWTにはjavax.awtパッケージが必要
スイング 1。Swingは、より少ないメモリ空間しか占有しません2。Swingコンポーネントはプラットフォームに依存しません3。Swingにはjavax.swingパッケージが必要です