JAVAでSwingsが重い、AWTが軽いと言われるのはなぜですか?
4 に答える
基本的に各 AWT コンポーネントはネイティブ プラットフォーム コンポーネントであるため、AWT は「重量級」と言われています。AWT は、プラットフォームのネイティブ GUI ツールキットの上に実装されています。これは、AWT が Swing に比べてかなり制限されていた理由も説明しています。実装されている限り、最小公倍数を使用します。
一方、Swing は、トップ レベルのコンポーネント (ウィンドウなど) を除いて、ほとんどすべてが Java で実装されています。ネイティブ コンポーネントが存在する可能性があり、それらは依然として「ヘビー ウェイト」と呼ばれます。
AWT、Swing、および SWT の詳細な比較については、IBM のこのページを参照してください。
編集:あなたの言い回しでは重い/軽いが逆になっているように見えますが、それがあなたの質問だったと思います. ヘビー/ライト ウェイトは、Java GUI ツールキットのほぼ標準的な名称であるため、理解した上で行いました。(それを指摘してくれたBobbyShaftoeに感謝します)。
Javaの世界では、AWTコンポーネントは、基盤となるネイティブコンポーネントを使用するため、「ヘビーウェイト」と見なされます。java.awt.Buttonのインスタンスをインスタンス化するとき、実際には、基盤となるOSにこのオブジェクトをペイントするように要求しています。
一方、Swingは、すべてのペイントをJava2D APIに依存し、基盤となるOSまたはハードウェアに委任するため、「軽量」です。これは、Swingが特定のルックアンドフィール(Windows、GTK、Motifなど)を模倣するために実際のペイントを行うすべてのUIコンポーネントを必要とする理由も説明しています。
この記事では、軽量コンポーネントと重量コンポーネントの違いについて詳しく説明します。
お役に立てれば。
各「重量」コンポーネントにはネイティブ ピアがあり、「軽量」コンポーネントにはありません。AWT は重いため、Windows プラットフォームでは各 AWT ボタンに対応する MFC ボタンがあり、Unix プラットフォームでは Motif ボタンがあります。Swing は軽量なので、ボタンのグラフィックはフレームの上に描画されるだけです...下にある MFC または Motif ボタンはありません。このトピックの詳細については、Sun の Web サイトの記事Mixing Heavy and Light Componentsを参照してください。
私は質問を完全には理解していません。これが炎上戦争につながると確信していますが、おそらく AWT が「より単純な」API を提供しているためですが、それはもう少し原始的です。ただし、Swing は、API が好きな人にとっては、間違いなく非常に重い、または重いものです。AWT よりもはるかに豊富なサポートと多くのクラスがあります。