241

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

Swing よりも AWT の方が有用である、または AWT を使用することをお勧めする場合、またはその逆の場合はありますか?

4

9 に答える 9

254

AWT は、OS に存在するネイティブ システム GUI コードへの Java インターフェイスです。試行はしますが、すべてのシステムで同じように動作するとは限りません。

Swing は多かれ少なかれ純粋な Java GUI です。AWT を使用してオペレーティング システム ウィンドウを作成し、ボタン、ラベル、テキスト、チェックボックスなどの画像をそのウィンドウに描画し、すべてのマウス クリック、キー入力などに応答して、何をすべきかを決定します。オペレーティングシステムに処理させる代わりに。したがって、Swing は 100% 移植可能であり、プラットフォーム間で同じです (ただし、Swing はスキン可能であり、「プラグ可能なルック アンド フィール」を備えているため、ネイティブ ウィンドウやウィジェットの外観とほぼ同じように見せることができます)。

これらは 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 の考え方への回帰のようなものです。

于 2009-01-03T09:51:31.433 に答える
37

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

于 2009-01-03T10:48:19.540 に答える
18

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

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

于 2009-01-03T09:48:58.943 に答える
12

AWT が Swing よりも便利な場合については、次のとおりです。

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

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

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

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

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

于 2013-05-29T09:35:21.627 に答える
8

スイング:

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

AWT:

  1. AWT は抽象ウィンドウ ツールと呼ばれます。
  2. AWT コンポーネントはプラットフォームに依存します。
  3. AWT コンポーネントは重量コンポーネントです。
于 2013-02-21T15:18:57.990 に答える
3

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

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

于 2013-04-11T13:37:45.203 に答える