1,Graphicsクラス | 描画関係 設定関係 |
2,描画 | paintメッソド外での描画 repaint ちらつきをなくす |
Graphicsクラスには、描画に関わる様々な関数が用意されています。
以下にGraphicsクラスで用意されている関数を紹介します。
命令:線分の描画 文法: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(x1,y1,w,h) 解説:四角形の左上を(x1,y1)として、幅w、高さhの四角形を描画します。
命令:四角形の描画 文法:fillRect(x1,y1,w,h) 解説:四角形の左上を(x1,y1)として、幅w、高さhの四角形を描画します。 中身は塗りつぶされます。
※drawRectは中身が塗りつぶされないのに対してfillRectは塗りつぶされます。
塗りつぶすときの色は黒ですが変更もできます。
命令:領域のクリア 文法:clearRect(x1,y1,w,h) 解説:左上を(x1,y1)として、幅w、高さhの領域をクリア(消去)します。
命令:角丸四角形の描画 文法:drawRoundRect(x1,y1,w,h,aw,ah) 解説:左上を(x1,y1)として、幅w、高さhの角の丸い四角形を描画します。 角は幅aw 高さahの楕円になります。
命令:角丸四角形の描画 文法:drawRoundRect(x1,y1,w,h,aw,ah) 解説:左上を(x1,y1)として、幅w、高さhの角の丸い四角形を描画します。 角は幅aw 高さahの楕円になります。中身は塗りつぶします。
命令:楕円の描画 文法:drawOval(x1,y1,w,h) 解説:左上を(x1,y1)として、幅w、高さhの楕円を描画します。
命令:楕円の描画 文法:fillOval(x1,y1,w,h) 解説:左上を(x1,y1)として、幅w、高さhの楕円を描画します。 中身は塗りつぶします。
命令:円弧の描画 文法:drawArc(x1,y1,w,h,sa,aa) 解説:左上を(x1,y1)として、幅w、高さhの楕円で sa度からaa度円弧を描画します。
命令:円弧の描画 文法:fillArc(x1,y1,w,h,sa,aa) 解説:左上を(x1,y1)として、幅w、高さhの楕円で sa度からaa度円弧を描画します。中身は塗りつぶします。
命令:多角形の描画 文法: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(xp,yp,n) 解説:配列xpをx座標,配列ypをy座標としたnこの多角形を描画します。 中身は塗りつぶします。
命令:文字の描画 文法:drawString(String str,x1,y1) 解説:文字変数Stringの文字を(x1,y1)座標を左下とする位置に描画します。 FontはデフォルトでTimesRoman標準の9サイズです。(変更可)
命令:イメージファイルの表示 文法: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(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(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番目の引数はフォントのサイズです。
paintメソッドにはデフォルトで「Graphics g」でオブジェクトgがあるので
「g.***」とやれば描画できました。
もし、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メッソド内におくのが適しています。
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に戻る