描画

last modified: Jan./29th/2002

アプレットの動作は、実行したいタイミングに応じたライフタイムメソッド内で実装します。すると、そのアプレットをインスタンス化したブラウザが自動的に実行します。

最初は、静的に描画するだけのアプレットを紹介します。アプレットでは描画したい内容を paint() メソッドで実装します。これもスーパークラスで定義されたもののオーバーライドになります。

paint() メソッド

paint() メソッドは、起動時には init(), start() に続いて自動的に実行されます。

このメソッドは java.awt.Container で定義されたものを、サブサブクラスの Applet 要素が継承したものを、さらに継承したものです。定義は public void paint(Graphics g) となっており、ブラウザが自動的にインスタンス化するときに描画するセットである java.awt.Graphics オブジェクトを引数として受け取ります。

したがって、描画するアプレットには、 java.awt.Graphics をインポートしておきます。

ブラウザから受け取った Graphics オブジェクトのメソッドとして描画します。

サンプル

テキスト描画

単純な例として、文字列を描画するメソッド drawString() を紹介します。

public abstract void drawString(String str, int x, int y)

引数は三つあり、第一引数の文字列を描画します。第二、第三引数はアプレット描画枠の左上隅からのオフセット値であり、第一が右向き x 座標、第二引数が下向き y 座標です。

import java.applet.Applet;
import java.awt.Graphics;

public class StringTest extends Applet{
	public void paint(Graphics gs){
		gs.drawString("Hello world!", 10,40);
	}
}
アプレットが実行できない場合の代替内容。
アプレット:PaintTest.class

drawLine()

次の例は単純な直線を描画します。 int 型引数四つで、始点座標 (x1, y1)、終点座標 (x2, y2) です。

import java.applet.Applet;
import java.awt.Graphics;

public class LineTest extends Applet{
	public void paint(Graphics gs){
		gs.drawLine(20,10, 80,40);
	}
}
アプレットが実行できない場合の代替内容。
アプレット:LineTest.class

線分の表示は、当然ですが始点と終点の記述が逆転しても変化はありません。

drawRect()/fillRect()

次の例は長方形を描画します。これら二つのメソッドは、内部を塗りつぶすかどうかで区別されます。何れも int 型引数四つで、始点座標 (x1, y1)、幅、高さです。

import java.applet.Applet;
import java.awt.Graphics;

public class RectTest extends Applet{
	public void paint(Graphics gs){
		//線だけ描画
		gs.drawRect(20,10, 80,30);
		//内部を塗りつぶして描画
		gs.fillRect(120,10, 80,30);
	}
}
アプレットが実行できない場合の代替内容。
アプレット:RectTest.class

一般に、 drawXX() 系のメソッドは枠線だけ描画し、 fillXX() 系のメソッドは内部を塗りつぶします。

draw3DRect()/fill3DRect()

ちょっと変わった立体的な長方形を描画します。

public void draw3DRect(int x, int y, int width, int height,
                       boolean raised)

引数は五つで、始点、幅、高さ、浮き上がらせるかどうかを指定します。

import java.applet.Applet;
import java.awt.Graphics;
//描画色指定の為のクラス
import java.awt.Color;

public class Rect3DTest extends Applet{
	public void paint(Graphics gs){
		//描画色を指定
		gs.setColor(Color.lightGray);
		//線だけ描画
		gs.draw3DRect(20,10, 80,30, true);
		//内部を塗りつぶして描画
		gs.fill3DRect(120,10, 80,30, false);
	}
}
アプレットが実行できない場合の代替内容。
アプレット:Rect3DTest.class

なかなか、浮き出た感じに表示されませんが、幅1ピクセルの影が描画されています。

drawOval()/fillOval()

次のサンプルは楕円形を描画します。引数は四つで、左上端のオフセット座標、幅、高さです。

import java.applet.Applet;
import java.awt.Graphics;

public class OvalTest extends Applet{
	public void paint(Graphics gs){
		//線だけ描画
		gs.drawOval(20,10, 80,30);
		//内部を塗りつぶして描画
		gs.fillOval(120,10, 80,30);
	}
}
アプレットが実行できない場合の代替内容。
アプレット:OvalTest.class

drawArc()/fillArc()

扇形の円弧、楕円弧を描画します。引数は六つあり、開始角度と弧を描画する範囲の角度です。角度は「度(°)」で図り、3時の方向が0度です。

import java.applet.Applet;
import java.awt.Graphics;

public class ArcTest extends Applet{
	public void paint(Graphics gs){
		//線だけ描画
		gs.drawArc(20,10, 80,30, 30,210);
		//内部を塗りつぶして描画
		gs.fillArc(120,10, 80,30, 150,120);
	}
}
アプレットが実行できない場合の代替内容。
アプレット:ArcTest.class

drawPolygon/fillPorygon

nPoints 個の座標を頂点とする多角形を描画します。

public abstract void drawPolygon(int[] xPoints, int[] yPoints,
                                 int nPoints)

頂点の x 座標と y 座標はそれぞれ int 型配列で用意します。

import java.applet.Applet;
import java.awt.Graphics;

public class PolygonTest extends Applet{
	public void paint(Graphics gs){

		//三角形の x 座標
		int[] xCord1 = {20, 30, 100};
		//三角形の y 座標
		int[] yCord1 = {10, 40, 30};

		int[] xCord2 = {120, 130, 200};
		int[] yCord2 = yCord1;

		//線だけ描画
		gs.drawPolygon(xCord1, yCord1, 3);
		//内部を塗りつぶして描画
		gs.fillPolygon(xCord2, yCord2, 3);
	}
}
アプレットが実行できない場合の代替内容。
アプレット:PolygonTest.class

他にも多くの drawXX()/fillXX() が存在します。



Copyright © 2001 SUGAI, Manabu. All Rights Reserved.