SwingとAWTの違いを教えてください。
AWTがSwingまたはその逆よりも使用する方が便利/推奨される場合はありますか?
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の考え方にいくらか似ています。
すでに誰もが言及した基本的な違いは、1つは重量であり、もう1つは重量であるということです。基本的にヘビーウェイトという用語の意味は、awtコンポーネントを使用する場合、ビューコンポーネントを取得するために使用されるネイティブコードオペレーティングシステムによって生成されるであるため、外観と感じの変化OSからOSへ Swingコンポーネントのように、その責任はコンポーネントのビューを生成するためのJVM私が見た別のステートメントはswingはMVCベースであり、awtはそうではありません。
Swing vs AWT 。基本的にAWTは最初に登場し、ヘビーウェイトUIコンポーネントのセットです(オペレーティングシステムオブジェクトのラッパーであることを意味します)。一方、Swingは、AWTの上に軽量コンポーネントの豊富なセットで構築されています。
重大なJava UIの作業は、主にアプレットに使用されたAWTではなくSwingで行われます。
AWTがSwingよりも有用な場合、
AWTとSwingのこの違いから、いくつかの結果が生じます。
AWTはOSの上にある薄いコード層ですが、Swingははるかに大きくなっています。 Swingの機能も非常に豊富です。 AWTを使用すると、Swingに組み込まれている間に多くのことを自分で実装する必要があります。GUIを集中的に使用する場合、AWTはSwingと比較して非常に原始的であると感じます。 SwingはホストOSに依存するのではなく、GUI機能自体を実装するため、Javaが実行されるすべてのプラットフォームでより豊かな環境を提供できます。すべてのプラットフォームが同じ外観のコントロールを同じ方法で実装しているわけではないため、AWTはすべてのプラットフォームで同じ機能を提供することにより制限されています。
Swingコンポーネントは、機能を実装するためにネイティブOSオブジェクトを必要としないため、「軽量」と呼ばれます。 JDialog
とJFrame
は、ピアを持っているため、重量級です。したがって、JButton
、JTextArea
などのコンポーネントは、OSピアがないため軽量です。
ピアは、ボタンオブジェクトや入力フィールドオブジェクトなど、オペレーティングシステムによって提供されるウィジェットです。
スイング:
AWT:
AWT 1。 AWTはより多くのメモリ空間を占有します2。 AWTはプラットフォームに依存しています3。 AWTにはjavax.awtパッケージが必要です
スイング 1。 Swingが占有するメモリ領域が少なくなります2。 Swingコンポーネントはプラットフォームに依存しません3。 Swingにはjavax.swingパッケージが必要です