タイトル

Graphicsクラス

タイトル

1,Graphicsクラス 描画関係 設定関係
2,描画 paintメッソド外での描画 repaint ちらつきをなくす

1,Graphicsクラス

Graphicsクラスには、描画に関わる様々な関数が用意されています。
以下にGraphicsクラスで用意されている関数を紹介します。


描画関係

●drawLine

命令:線分の描画
文法:drawLine(x1,y1,x2,y2)
解説:座標(x1,y1)から(x2,y2)まで

※x1,x2,y1,y2はいずれもint型の変数か数値である必要があります。
 そのため、double型の変数や小数点を含んだ数値だとコンパイルエラーを起こします。
 もし、double型orfloat型の変数を使うなら次のようにキャストを使う必要があります。


void public paint(Graphics g){
     double x1=23.4;
     int y1=10,y2=20,x2=30;
     g.drawLine((int)x1,y1,x2,y2);
}

●drawRect

命令:四角形の描画
文法:drawRect(x1,y1,w,h)
解説:四角形の左上を(x1,y1)として、幅w、高さhの四角形を描画します。

drawRectでの描画

●fillRect

命令:四角形の描画
文法:fillRect(x1,y1,w,h)
解説:四角形の左上を(x1,y1)として、幅w、高さhの四角形を描画します。
   中身は塗りつぶされます。

※drawRectは中身が塗りつぶされないのに対してfillRectは塗りつぶされます。
 塗りつぶすときの色は黒ですが変更もできます。

●clearRect

命令:領域のクリア
文法:clearRect(x1,y1,w,h)
解説:左上を(x1,y1)として、幅w、高さhの領域をクリア(消去)します。

●drawRoundRect

命令:角丸四角形の描画
文法:drawRoundRect(x1,y1,w,h,aw,ah)
解説:左上を(x1,y1)として、幅w、高さhの角の丸い四角形を描画します。
   角は幅aw 高さahの楕円になります。

drawRoundRectでの描画

●fillRoundRect

命令:角丸四角形の描画
文法:drawRoundRect(x1,y1,w,h,aw,ah)
解説:左上を(x1,y1)として、幅w、高さhの角の丸い四角形を描画します。
   角は幅aw 高さahの楕円になります。中身は塗りつぶします。

●drawOval

命令:楕円の描画
文法:drawOval(x1,y1,w,h)
解説:左上を(x1,y1)として、幅w、高さhの楕円を描画します。

●fillOval

命令:楕円の描画
文法:fillOval(x1,y1,w,h)
解説:左上を(x1,y1)として、幅w、高さhの楕円を描画します。
   中身は塗りつぶします。

●drawArc

命令:円弧の描画
文法:drawArc(x1,y1,w,h,sa,aa)
解説:左上を(x1,y1)として、幅w、高さhの楕円で
   sa度からaa度円弧を描画します。

drawArcでの描画

●fillArc

命令:円弧の描画
文法:fillArc(x1,y1,w,h,sa,aa)
解説:左上を(x1,y1)として、幅w、高さhの楕円で
   sa度からaa度円弧を描画します。中身は塗りつぶします。

●drawPolygon

命令:多角形の描画
文法:drawPolygon(xp,yp,n)
解説:配列xpをx座標,配列ypをy座標としたnこの多角形を描画します。
void public paint(Graphics g){
     int xp[]={10,20,30};
     int yp[]={10,10,30};
     g.drawPolygon(xp,yp,3);
}

これは、(10,10) (20,10) (30,30)の3点を結んだ三角形を描画します。

●fillPolygon

命令:多角形の描画
文法:fillPolygon(xp,yp,n)
解説:配列xpをx座標,配列ypをy座標としたnこの多角形を描画します。
   中身は塗りつぶします。

●fillPolygon

命令:文字の描画
文法:drawString(String str,x1,y1)
解説:文字変数Stringの文字を(x1,y1)座標を左下とする位置に描画します。
   FontはデフォルトでTimesRoman標準の9サイズです。(変更可)

●drawImage

命令:イメージファイルの表示
文法:drawImage(Image img,x1,y1,this)
解説:Imageクラスのイメージファイルを(x1,y1)を左上とする位置に
   描画します。thisはここのWindowに描画することを意味しています。

具体的には次のように使います。


     Image img;

void public init(){
     img=getImage(getDocument(),"image/file.gif");

void public paint(Graphics g){
     g.drawImage(img,20,30,this);
}

まず、Imageクラスのimgを定義します。次にinitクラスでimgの実体を与えます。
getDocument()メッソドで現在のURLが得られ、次の"image/file.gif"で
imageディレクトリのfile.gifファイルを読み込みます。
paintメッソドでこれを表示しています。

上上へ


設定関係

●setColor

命令:色の変更
文法:setColor(Color c)
解説:描画するときの色はデフォルトで黒でしたが変更ができます。
命令:多角形の描画
文法:drawPolygon(xp,yp,n)
解説:配列xpをx座標,配列ypをy座標としたnこの多角形を描画します。
void public paint(Graphics g){
     g.setColor(Color.blue);
     g.drawString("Visual J++",30,10);
     g.setColor(new Color(0,200,127));
     g.drawString("Java",30,30);
}

これで"Visual J++"の文字は青色に、Javaの文字はR=0,G=200,B=127の色になります。

●setFont

命令:フォントの変更
文法:setFont(Font f)
解説:描画するときのフォントを変更できます。
void public paint(Graphics g){
     g.setFont(new Font("TimesRoman",Font.PLAIN,12));
     g.drawString("Visual J++",30,10);
}

これでフォント名"TimesRoman"で標準でサイズ12の文字が書かれます。
Fontコントラクタの1番目の引数はフォント名でほかにも
「Courier」「Dialog」「Symbol」などがあります。
ただし、マイナーなフォントだと、そのフォントがインストールされていない
パソコンでは表示できないので注意が必要です。
2番目の引数はフォントのタイプで「標準」「太字」「イタリック」
がありそれぞれ「Font.PLAIN」「Font.BOLD」「Font.ITALIC」になります。
3番目の引数はフォントのサイズです。

上上へ


2,描画

paintメソッドにはデフォルトで「Graphics g」でオブジェクトgがあるので
「g.***」とやれば描画できました。

paintメッソド外での描画

もし、paintメッソド外で描画するには次のようにオブジェクトを作ってしまいます。

Graphics g;
g=getGraphics();

g.drawString("Java",10,20);

これで、Graphicsのオブジェクトが得られます。
もし、クラス内のあちらこちらで使うのであれば次のようにするといいです。

public class namae extends Applet
{
	Graphics g;

	public void init()
	{
    	resize(320, 240);
        g=getGraphics();
	}
}

こうすれば、クラス内のどこからでも描画ができます。
getGraphicsを使うのはアプレット実行時に一回だけ読み出される
initメッソド内におくのが適しています。


repaint

paintメッソドはアプレットWindowが現れたときなど再描画が必要なときに呼び出されます。
しかし、任意に読み出すことができます。
repaint()命令を使うとWindowをクリアした後にpaintメッソドを実行します。


ちらつきをなくす

repaint命令は一回Windowをすべて消してから描画するためちらつきがあります。
この再描画が多いとちらつきが気になります。
repaint命令を使うとupdateメッソド,paintメッソドの順に読み出します。

そこで、updateメッソドを自分で作ってしまいます。

public class namae extends Applet
{
	public void update(Graphics g)
	{
        paint(g);
	}
}

これで「repaint()」を実行すると、updateメッソド,paintメッソドの順で
読み出されるのですが画面をクリアする作業がないのでちらつきがありません。
ただし、ときどき残像が残るのとがあります。

上上へ


戻るC++のPageに戻る