WisdomSoft - for your serial experiences.

1.3 AWTからSwingへ

AWT と Swing の関係、Swing が誕生した経緯、及び AWT に対する Swing の優位性を紹介します。

1.3.1 軽量コンポーネント

Swing は Java のオリジナルな技術を指すのではなく、AWT の軽量コンポーネントを実装するクラスライブラリのパッケージ名を表しています。AWT のピアを保有するコンポーネントは、ネイティブシステムのウィンドウに依存していたため、拡張性が乏しく、常に矩形であることと不透明であることを強いられていました。

軽量コンポーネントの登場以来、この問題は解決され、独自の GUI 部品を開発することができるようになりましたが、すべての開発者が自分専用の AWT に代わるバグのない GUI ライブラリを開発するというのは難しい話です。AWT に代わる、ピアに依存しない軽量コンポーネントのライブラリの開発が望まれるようになり、AWT の反省から開発されたのが Swing なのです。Swing が提供する GUI 部品は、AWT で指摘された問題点を十分に解決し、極めて高い拡張性を確保した柔軟な設計に基づいています。

残念ながら、本書では設計論の解説を目的としないため Swing が採用しているデザインパターンについて、詳しく説明することができませんが、設計論やデザインパターンを学習すると、Swing の多くのクラスがその手本となるくらい、極めて優れたライブラリなのです。

これまで説明してきたように Swing の GUI 部品の多くは AWT の描画機能を用いて実現される軽量コンポーネントにすぎません。Swing は AWT ライブラリの延長線上にある拡張セットのようなものなので、AWT の知識無しでは、Swing の本質を理解することはできません。本書では Swing の解説を目的としていますが、本書の前半では AWT の描画機能と AWT による軽量コンポーネントの実装方法について説明しています。

本書では、AWT のピアに依存した重量のクラス群については解説を省略しています。Swing を学習するときに AWT の GUI 部品に関する知識は一部を除いて不要です。AWT のピアに依存したクラスの知識が必要となる部分に関しては、本書でも説明してますが、それ以外のピアを持つクラスは Swing で完全に置き換えられているため、プラットフォームに依存しない Swing が存在する現在では、改めて AWT のピアに依存したクラスを学習するメリットはそれほどないでしょう。

それでも興味があるという方は、SDK のドキュメントを参照すると良いでしょう。今では廃止された推奨されていない機能なども含めて、AWT が開発された当時の歴史の跡を発見することができるはずです。

Swing を学習するメリットは非常に大きく、Java プログラミングの可能性を大幅に広げてくれるでしょう。まず、Swing は AWT になかった多くの機能を追加しているため、高度なアプリケーションを短時間で作成することができます。しかも、Swing が提供するクラスの多くが、基本的な機能を継承したまま拡張できるように設計されているため、プログラムの拡張性も十分です。