SwingとAWTの違いは何ですか?


回答:


235

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の考え方に少し戻っています。


ええと...複数のプラットフォーム間でかなり大規模なSwingを実行したので、プラットフォーム間でほとんど同じではないことがわかります。似てる?承知しました。同じ?ありえない。
cletus 2009年

1
ヘビーウェイト/ライトウェイトの問題は、Java 6アップデート12で解消されます(java.dzone.com/news/a-farewell-heavyweightlightweiを参照)。
Dan Dyer、

ワオ。彼らがそれを修正できるなんて信じられませんし、軽量コンポーネントと重量コンポーネントを混ぜることが望ましいとは信じられません。しかし、彼らがそれを修正できることは信じられないことです。
skiphoppy、2009年

両方を忘れてください。WPFをご覧ください。:)
アルパーオズセチン2009

3
以下は、混合が修正されたことを確認するJavaの公式記事です。oracle.com
technetwork

35

すでに誰もが言及している基本的な違いは、一方が重量であり、他方が軽量であるということです。基本的に、ヘビーウェイトという用語の意味は、awtコンポーネントを使用している場合、ビューコンポーネントを取得するために使用されるネイティブコードがオペレーティングシステムによって生成されることです。そのため、OSからOSにルックアンドフィールが変更されます。Swingコンポーネントの場合と同様に、コンポーネントのビューを生成するのJVMの責任です。私が見た別のステートメントは、swingはMVCベースであり、awtはそうではないということです。


14
Swingは、MVCアプローチから派生したモデルデリゲートアプローチを実際に使用します。このアプローチでは、ビューとコントローラーがデリゲート構造のために結合されます
Purushottam

15

Swing vs AWT。基本的にAWTが最初に来て、ヘビー級のUIコンポーネントのセット(オペレーティングシステムオブジェクトのラッパーであることを意味します)であるのに対し、Swingは、AWTの上に構築され、豊富な軽量コンポーネントのセットを備えています。

深刻なJava UIの作業はすべてAWTではなくSwingで行われ、主にアプレットに使用されていました。


1
awtがより便利である/スイングを使用するように勧められるケースはありますか
Samiksha、2009年

1
以前は関連性がありました... 10年前。
バート

@Pacerier彼はSWTではなくAWTについて話していました

11

SwingよりもAWTの方が役立つ場合がある限り-

  • Swingをサポートしていない古いJVMまたはプラットフォームをターゲットにしている可能性があります。これは、アプレットを構築する場合に実際に使用されていました。最も一般的な分母をターゲットにして、人々が新しいJavaプラグインをインストールする必要がないようにしたかったのです。現在最も広くインストールされているJavaプラグインのバージョンが何かはわかりません。これは、今日とは異なる場合があります。
  • Swingの「完全ではない」プラットフォームスキンよりもAWTのネイティブな外観を好む人もいます。(Swingの実装BTWよりもサードパーティのネイティブな外観のスキンが優れています)多くの人々は、AWTのFileDialogをSwingのFileChooserよりも使用することを好んでいました。

2
しかし、最後の1のために、我々はまた、ファイルチューザを作成できるWindowsファイルダイアログのような、かなりルックス(ただし、自動補完付き)stackoverflow.com/q/17630055/2534090
JavaTechnical

9

AWTとSwingのこの違いにより、いくつかの結果が生じます。

AWTはOSの上にあるコードの薄い層ですが、Swingははるかに大きいです。Swingの機能も非常に豊富です。AWTを使用すると、Swingに組み込みのものがある一方で、多くのことを自分で実装する必要があります。GUIを多用する作業の場合、AWTはSwingに比べて非常に原始的に動作します。SwingはホストOSに依存するのではなく、GUI機能自体を実装するため、Javaが実行されるすべてのプラットフォームでより豊かな環境を提供できます。AWTは、すべてのプラットフォームが同じように見えるコントロールを同じ方法で実装しているわけではないため、すべてのプラットフォームで同じ機能を提供することがより制限されています。

Swingコンポーネントは、機能を実装するためにネイティブOSオブジェクトを必要としないため、「軽量」と呼ばれます。JDialogそしてJFrame、彼らは仲間を持っているので、ヘビー級です。コンポーネントが好きなのでJButtonJTextArea彼らはOSピアを持っていないので、など、軽量です。

ピアは、ボタンオブジェクトまたは入力フィールドオブジェクトとしてオペレーティングシステムによって提供されるウィジェットです。


7

スイング:

  1. SwingはJava Foundationクラスの一部です。
  2. Swingコンポーネントはプラットフォームに依存しません。
  3. Swingはawtの上部にあるため、Swingコンポーネントは軽量コンポーネントです。

AWT:

  1. AWTは抽象ウィンドウツールと呼ばれます。
  2. AWTコンポーネントはプラットフォームに依存しています。
  3. AWTコンポーネントは重量コンポーネントです。

5
  • swingコンポーネントは、モデルビューコントローラー(mvc)に準拠しているため、非常に柔軟なユーザーインターフェイスを提供します。
  • awtはMVCベースではありません。
  • スイングが速く動作します。
  • awtは速く動作しません。
  • スイングコンポーネントは軽量です。
  • awtコンポーネントは重量です。
  • swingはより少ないメモリ空間しか占有しません。
  • awtはより多くのメモリ空間を占有します。
  • スイングコンポーネントはプラットフォームに依存しません。
  • awtはプラットフォームに依存します。
  • swingにはjavax.swingパッケージが必要です。
  • awtにはjavax.awtパッケージが必要です。

10
AWTはOSに既に存在するネイティブコード(guiコード)を使用しますが、swingはすべてのコンポーネントを最初から構築するため、swingはAWTよりも速く動作するとは思いません。したがって、AWTの方が高速かもしれません。スイングがより速く機能するというあなたの見方を教えてください。ありがとう。
JavaTechnical 2014

3

AWT 1。AWTはより多くのメモリ空間を占有します2。AWTはプラットフォームに依存します3。AWTにはjavax.awtパッケージが必要

スイング 1。Swingは、より少ないメモリ空間しか占有しません2。Swingコンポーネントはプラットフォームに依存しません3。Swingにはjavax.swingパッケージが必要です


1
AWTがより多くのメモリ空間を占める方法を教えてください。ネイティブコードを使用しているからですか?
JavaTechnical 2014

awtにはjava.awt。*が必要です
abhisekp '15
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.