Swing について読むときはいつでも、彼らは軽量のコンポーネントだと言っています。Swing をググったところ、Swing がネイティブ ピアに依存していないことがわかりました。それが「軽量」と呼ばれる理由ですか?軽いということは、Swing コンポーネントが AWT コンポーネントよりも占有するメモリが少ないのではないかと考えたからです。そうじゃない?
3 に答える
Swingは、グラフィカル ユーザー インターフェイス コンポーネントを描画するためにネイティブ オペレーティング システムを呼び出すことなく、Java で完全に実装されているため、軽量であると見なされます。
一方、AWT (Abstract Window Toolkit) は重量級のツールキットであり、GUI コンポーネントを作成するためにオペレーティング システムを呼び出すだけです。
AWT と Swing でのペイントの記事のEvolution of the Swing Paint Systemセクションでは、軽量と重量の違いについて説明しています。
元の AWT API が JDK 1.0 用に開発されたとき、重量コンポーネントのみが存在していました (「重量」とは、コンポーネントに独自の不透明なネイティブ ウィンドウがあることを意味します)。これにより、AWT は各ネイティブ プラットフォームのペイント サブシステムに大きく依存することができました。
[...]
JDK 1.1 で軽量コンポーネントが導入されたため (「軽量」コンポーネントとは、最も近い重量級の祖先のネイティブ ウィンドウを再利用するコンポーネントです)、AWT は共有 Java コードで軽量コンポーネントの描画処理を実装する必要がありました。
Swing は Java で実装されているため、パフォーマンスに多少の欠点がありますが、Java の最近のリリースではパフォーマンスが向上したと聞いています。
Swing の利点は、JTable
やなどJList
、AWT で提供されるコンポーネントよりもグラフィカルで拡張性の高い多くのコンポーネントを使用できることです。これにより、よりグラフィックスが豊富なアプリケーションを開発できます。
軽量か重量かは、UI コンポーネントの実装方法の問題です。重量コンポーネントはオペレーティング システム オブジェクトをラップしますが、軽量コンポーネントはラップしません。これらは JDK に厳密に実装されています。