
はじめてはJava
Vol.5
AWT
◎ AWT ( Abstract Window Toolkit )
ウィンドウや画面に描画される画像、あるいはマウスで操作可能な擬似的なボタンなど、ユーザ・インターフェイスを構築する部品類が含まれます。
簡単なAWTを利用したサンプルを挙げます。
これは、Frameを生成しそこに適当な図柄を描画しています。
★ AWT( Abstract Window Toolkit )の意味
Window Toolkit:ウィンドウ・アプリケーションを作るための道具箱。
Abstract:抽象化されて実体をもったない。
→ なんでAbstractなのか?
∵ Javaで書かれたアプリケーションは、UNIXのX-Window, Windows,
MacOS など複数のウィンドウ・システム上で実行可能でなければなりません。
そのためには、次の条件を満たさなければなりません。
1. プログラムの記述がウィンドウ・システムに依存しない。
2. 個々のウィンドウ・システムの機能を呼び出すことができる。
この一見矛盾している2つの要求を満たすのには抽象クラスやインターフェイスを利用することによって実現できます。
(以下、AWTの仕組みと抽象クラスで詳しく説明します。)
◎ AWTの仕組みと抽象クラス
★「Graphics」クラス
Graphicsクラスによってアプリケーションは、各種デバイスにより実現されるコンポーネント上やオフスクリーンイメージ上に描画できます。
Graphicsは抽象クラスです。
AWTの機能を実現するための3層構造がとられています。
上位層:Javaのプログラムに記述される「Graphics」クラス。
下位にある中間層のクラスを覆い隠す役割をします。
中間層:実際にオブジェクトとして生成されるクラス。
その実体がなんであるかはシステムに依存します。
内部で「ネーティブ・メソッド」と呼ばれるマシーンに依存したコードを呼び出せるようになっています。
下位層:各プラットフォームに特有のウィンドウ・システムの機能を制御するプログラム。
※ 「Toolkit」「Image」も「Graphics」と同様の仕組みです。

「Graphics」の抽象クラスが、実行時には何という名前のクラスのオブジェクトとして生成されているかを調べるプログラムです。
実行結果は
Windows環境では、
Graphics Name: sun.awt.windows.WGraphics
Solaris環境では、
Graphics Name: sun.awt.motif.X11Graphics
といった、環境によって異なるものを返します。
★ コンポーネント
JDK1.1までのコンポーネントはGraphicsと同様の事情があります。
異なる点は抽象クラスではないので、直接オブジェクトを生成できることです。
例:Buttonクラス
内部のフィールドとして「ButtonPeer」というデータを持っています。
ButtonPeerは「java.awt.peer」に含まれるインターフェイスです。
実行時に生成されるのはButtonPeerを実装したクラスのオブジェクトです。
このとき、クラス名はシステムに依存します。
※ java.awt.peerはJDK1.1以降ドキュメントから姿を消したパッケージです。
Swingが登場したことによって、やがて消滅する運命のパッケージだそうです。

「Button」の「peer」をチェックするプログラムです。
実行結果は、
Windows環境では、
sun.awt.windows.WButtonPeer
Solaris環境では、
sun.awt.motif.MButtonPeer
といった、環境によって異なるものを返します。
参考資料:
・Java World 1998.5 Java入門 第5回 JDKのクラスライブラリ「java.awt」 - 1