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()
が存在します。