6-2: java.awtの基本となるクラス

JDKに用意されているグラフィックス関連のパッケージとクラスについて概説します。


・ JDKにはウィンドウアプリケーションを開発するために java.awtとそのサブパッケージ群を提供しています。 その機能は JDKのバージョンが進むにつれて次々と拡張され、 JDK1.2 では膨大な数のサブパッケージが存在します。 しかし、最も基本となるのは java.awt の下に直接含まれるクラスです。 それらをグループに分類して紹介しましょう。

java.awtのクラスの分類
働きによる分類クラス名
グラフィックスの表示に関連したクラス 基本図形のクラスPoint, Dimention, Rectangle, Polygon
色、フォント、イメージなど Graphics, Color, SystemColor, Font, FontMetrics, Image, MediaTracker
Graphics2Dの描画に関連するクラス Graphics2D, AlphaCommposite, BasicStroke, GradientPaint, TexturePaint, StandardGlyphSet, GraphicsConfiguaration, GraphicsEnvironment, GraphicsDevice
イベント処理に関連したクラス (JDK1.0 の古いモデル用)Event
(JDK1.1 の新しいモデル用) AWTEvent, AWTEventMulticaster
ユーザーインターフェイスを構築する部品 Componentとそのサブクラス Component, Button, Label, Checkbox, Choice, List, Canvas, TextComponent, TextField, TextArea, Scrollbar, Container, Panel, ScrollPane, Window, Frame
レイアウトに関するクラス CheckboxGroup, Insets, FlowLayout, BorderLayout, CardLayout, GridLayout, GridBagLayout, GridBagConstraints
その他、メニューやカーソルなど Menu, MenuItem, CheckboxMenuItem, PopupMenu, MenuShortcut, MenuBar, Cursor, Dialog, FileDiaglog, PrintJob, AWTPermission, Toolkit

・ java.awtパッケージの主要な目的は、 ウィンドウシステムにおける GUI (Graphical User Interface)の実現です。 上の表を見てわかるように、まずグラフィックスの表示および イベント処理を直接取り扱うためのクラスが存在します。 その他に、既に表示とイベント受け付けという両方の機能を備えた 部品のクラス(コンポーネント)が多数用意されているのがわかります。 実際のアプリケーションでは、これらの部品を活用して ユーザーインターフェイスの設計を行います。
ただしJDK1.2 では Graphics2D およびその描画に関連するクラスが java.awt に追加されています。その他に 基本図形のオブジェクトや Color、Font、Imageの取り扱いが大幅に拡張されています。 コンポーネントのクラスもより高機能の Swingコンポーネントに移行します。 そららはすべて別のサブパッケージとして提供されています。

・ グラフィックスの表示に用いられる最も基本的なクラスとその役割を、 あらためてまとめてみましょう。

グラフィックスの表示の基本となるクラス
クラス名働き
Color色のイメージのオブジェクトを提供する
Fontフォントのイメージのオブジェクトを提供する
Imageイメージのオブジェクトを提供する
Graphicsグラフィックスの表示の手段を提供する

・ Color と Font はどちらも比較的単純なデータの集まりです。 Color のオブジェクトはコンストラクタに RGB の三原色の値を与えることで生成できます。 (引数は 0 - 255 の int型データか、0.0f - 1.0f の float型データです。) また Colorクラスは、よく利用される 13色については、 staticなフィールドとしてオブジェクトを取り出すことができます。
Font のオブジェクトはコンストラクタにフォントの「ファミリイ名」、 「字体」、「文字のサイズ」の3つの情報を与えることで生成できます。 「ファミリイ名」は Stringクラス、「字体」は Fontクラスに定義された定数、 「文字サイズ」は int型の数値です。


Color red = new Color( 255, 0, 0 );
Color blue = new Color( 0.0f, 0.0f, 1.0f );
Color green = Color.green;  // new Color( 0, 255, 0 ) と同じ
Font  small = new Font( "TimesRoman", Font.BOLD, 12 );
Font  large = new Font( "TimesRoman", Font.PLAIN, 36 );

・ Graphics と Image はシステムに大きく依存する性質を持っています。 そのため抽象クラスとして定義され、 コンストラクタによるオブジェクトの生成は行えません。 それぞれに定められた方法によってオブジェクトを得る必要があります。
Imageのオブジェクトを得るには、 Toolkitクラスの助けを借りるのが最もわかりやすい方法です。 Toolkit はウィンドウシステムそのものを表すクラスと考えてください。 実は Toolkit自身が抽象クラスですが、 Toolkit は staticなメソッド getDefaultToolkit() によってオブジェクトを 得ることができます。 その上で、getImage()メソッドを呼び出します。 したがって、次のような手順になります。


Toolkit toolkit = Toolkit.getDefaultToolkit();
Image image = toolkit.getImage( "fujiki.jpg" );

ネットワークを介してリモートのマシンの画像データにアクセスしたいような 場合には、ファイル名の代わりに URLを指定することになります。 基本的な取り扱い方はローカルの場合と同じですが、 java.net.URLクラスのオブジェクトを生成する必要があります。


try {
    Toolkit tk = Toolkit.getDefaultToolkit();
    URL url = getClass().getResource( "fujiki.jpg" );
    image = tk.createImage( (ImageProducer)url.getContent() );
}
catch( Exception e ){
}
 

getClass()というメソッドが呼び出されているのは、 実行中のオブジェクトの実行環境を知りたいからです。 その情報を手がかりに相対的に URLを知ることができます。 この方法を用いると、 設計中のクラスがブラウザや開発ツールの仮想マシンで実行されるケースでも データファイルを見つけだすことができます。