Graphics

 Graphicsクラスは Objectクラスの直接のサブ・クラスです。 java.awtパッケージに含まれます。 Graphicsはグラフィック処理を実現する重要なクラスです。 使用する色やフォントなどの情報を記憶し、 多く図形を描くための「グラフィック関数」を提供します。 (画面に表示される図形そのものを表すクラスではありません。 むしろ、それらをコントロールするためのクラスだと考えてください。)
 Graphicsクラスは abstractなクラスです。 グラフィックの処理は、一般にシステムの実装に大きく依存するからです。 したがって Graphicsのオブジェクトを、 プログラムの中でコンストラクタによって生成することはできません。 通常は「外から与えられたオブジェクトを利用する」ことになります。
 Graphicsクラスには publicな変数は存在しません。 しかし、使用する色やフォントなどの情報は内部に記憶しています。 これらの変数にアクセスするには後述の専用のメソッドを用います。

Graphicsクラスのメソッド

 Graphicsクラスには、 引数の区別もすると全部で 40個余りのメソッドが定義されています。 メソッドの目的ごとに以下の項目のようにグループ分けして解説します。

  1. 基本図形を描くメソッド
  2. 文字列やイメージを描くメソッド
  3. 図形のコピーやクリアを行うメソッド
  4. 色やフォントなどのデータへのアクセスを行うメソッド
  5. 座標系の操作のメソッド
  6. Graphicsのオブジェクト自身を操作するメソッド

基本図形を描くメソッド

 Graphicsクラスは基本的な図形を描くためのメソッドを提供します。 JDK 1.0 では図形は全て2次元のもので、線分(Line)、長方形(Rect)、 角が丸い長方形(RoundRect)、陰影付きの長方形(3DRect)、楕円(Oval)、 円弧(Arc)、多角形(Polygon)が提供されています。 drawで始まるメソッドは図形の輪郭のみを描き、 fillで始まるメソッドは図形の内部を塗りつぶします。 それぞれの図形ごとにメソッドの引数の意味、注意点をまとめておきましょう。 引数の与え方に多少クセがあるように感じるでしょう。 特に Arc や Polygonなど、あまりスマートではありません。 これは Xlib のグラフィック関数のルールを引き継いでいるせいです。 「ベストの記法ではないが従来のものに合わせる」という方針なのでしょう。

文字列やイメージを描くメソッド

 文字列を描くメソッドとして drawString(), drawChars(), drawBytes()があります。 drawChars()もdrawBytes()も文字のデータを Stringクラスのオブジェクトに 変換して最終的には drawString()を呼び出します。 drawChars()とdrawBytes()の第2および第3引数は、 それぞれの配列のデータの何番目からスタートし、 何文字分のデータを表示したいかを指定します。 drawString()の最後の2つの引数は文字列を描き始める点の座標です。 文字列の場合はフォントのベースラインの左端の点です。 他の基本図形のように左上端の点ではないので注意してください。
 Imageのオブジェクトを表示させるメソッドが drawImage()です。 drawImage()には以下のデータが必須です。 描きたい Imageのオブジェクト、イメージの左上端の X座標と Y座標、 ImageObserverのオブジェクト(通常はアプレット自身)の4つです。 この他に、表示されるイメージの横幅と高さおよび背景色を指定することもできます。 サイズの値は表示したいサイズで、 イメージ自身のサイズと一致する必要はありません。 イメージは自動的に拡大・縮小されて描かれます。 背景色の指定が有効になるのは、 イメージが「背景の透明化」の処理を受けている場合のみです。

図形のコピーやクリアを行うメソッド

 clearRect()メソッドは、 指定された長方形の領域のグラフィックの内容をクリアします。 copyArea()メソッドは、最初の4つの引数で指定された長方形の領域の グラフィックの内容を記憶し、最後の2つの引数で指定された場所にコピーします。

色やフォントなどのデータへのアクセスを行うメソッド

 Graphicsのオブジェクトが現在使用しているフォントを得るには getFont()メソッドを、設定するには setFont()メソッドを用います。 やり取りされるのは Fontクラスのオブジェクトです。 FontMetricsのオブジェクトを得るためのメソッドが getFontMetrics()です。 引数に Fontのオブジェクトを与えますが、省略すると Graphicsが現在使用 しているフォントに対応する FontMetricsのオブジェクトが返されます。

 Graphicsが現在使用中の色を得るには getColor()メソッドを、 設定するには setColor()メソッドを用います。やり取りされるのは Colorクラスのオブジェクトです。 基本図形や文字列は、この Colorのオブジェクトを利用して描かれます。
 図形を描く時に、その下に既にある図形との重なりをコントロールしたい 場合もあります。このような細かい操作に対して JDK 1.0はまだ十分な 機能を提供していません。 今のところ setPaintMode() と setXORMode()という2つのメソッドを利用できます。 setXORMode()メソッドは描画のモードを変更して、 指定された色と背景のピクセル値のビットごとの 排他論理和をとって描画します。 2度繰り返して描画すると背景の状態が復活するので、 ラバー・バンドなどの描画に活用できます。 setPaintMode()メソッドは通常の上書きモードの設定に戻します。

座標系の操作のメソッド

 translate()メソッドは、指定された位置に座標の原点を移動します。 clipRect()メソッドは、指定された長方形の領域のみを描画の対象に限定します。 いずれのメソッドもグラフィック処理を直接行うのではなく、 その後に呼び出されるグラフィック命令に影響を与えるためのものです。 また、内部のコンポーネントの描画を実行する場合にもしばしば利用されます。
 現在のクリップされた領域を知るためには getClipRect()メソッドを用います。

Graphicsのオブジェクト自身を操作するメソッド

 create()メソッドは、Graphicsのオブジェクトのコピーを生成します。 create()という名前が付いていますが、全く新しく Graphicsのオブジェクトを 生成するわけではありません。 通常は Graphicsのオブジェクトは1つあれば十分ですが、 場合によっては複数の Graphicsのオブジェクトを利用することがあります。 例として、複数の色をひんぱんに切り換えて描画する場合、 複数のサブ・コンポーネントの描画をランダムに繰り返すような場合が 考えられます。これらの場合、色や座標の情報を描画ごとに再設定し直して から描画するよりも、複数の Graphicsのオブジェクトを用いた方が 効率が良くなることもあります。 create()メソッドに新しい原点の位置と有効な領域の範囲を引数として与える こともできます。
 dispose()およびfinaze()メソッドは Graphicsのオブジェクトを 明示的に消去します。JDK 1.0 では両者の働きは全く同一です。
 toString()は Graphicsのオブジェクトの情報を Stringクラスのオブジェクトと して返します。返値には現在使用中の色およびフォントの情報が含まれています。