Graphics クラスは基本的な描画メソッドを提供し、Graphics2D クラスはより強力な描画機能を提供します。このセクションでは Graphics クラスについて説明し、次のセクションでは Graphics2D について説明します。
Graphics クラスは、主に線分の描画、長方形の描画、円の描画、色付きグラフィックの描画、楕円の描画、円弧の描画、多角形の描画などを含む、基本的な幾何学描画メソッドを提供します。
1. 線を描画する<br />ウィンドウ内に線分を描画するには、Graphics クラスのdrawLine() メソッドを使用します。
drawLine(int x1,int y1,int x2,int y2)
たとえば、次のコードは、点 (3,3) と点 (50,50) の間に線分を描画し、点 (100,100) に点を描画します。
g.drawLine(3,3,50,50);//線分を描画 g.drawLine(100,100,100,100);//点を描画します。
2.長方形を描く<br />長方形には正四角形と角丸四角形の2種類があります。
(1) 通常の長方形を描画するには次の 2 つの方法があります。
drawRect(int x, int y, int width, int height): ワイヤーフレームで囲まれた四角形を描画します。パラメータ x と y は左上隅の位置を指定し、パラメータ width と height は長方形の幅と高さです。
fillRect(int x, int y, int width, int height): 四角形を所定の色で塗りつぶして、色付きの四角形ブロックを取得します。
次のコードは、長方形を描画する例です。
g.drawRect(80,100,40,25);//ワイヤーフレームを描画 g.setColor(Color. yellow);g.fillRect(20,70,20,30);//カラーブロックを描画
(2) 角丸長方形を描画するには 2 つの方法があります。
drawRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight): 線で囲まれた角丸四角形です。パラメータ x と y は長方形の左上隅の位置を指定し、パラメータ width と height は長方形の幅と高さ、arcWidth と arcHeight はそれぞれフィレット円弧の横方向の直径と縦方向の直径です。
fillRoundRect(int x, int y, int width, int height, int arcWidth, int archeight): 所定の色で塗りつぶされた角丸長方形です。各パラメータの意味は前のメソッドと同じです。
次のコードは、長方形を描画する例です。
g.drawRoundRect(10,10,150,70,40,25);//角丸長方形を描画します g.setColor(Color.blue); g.fillRoundRect(80,100,100,100,60,40);//丸みを帯びた長方形のブロックを描画します g.drawRoundRect(10,150,40,40,40,40);//円を描画します g.setColor(Color.red); g.fillRoundRect(80,100,100,100,100,100);//円を描く
角丸長方形を描くことで円を描くことができます。長方形の幅と高さが等しい場合、角丸円弧の横の直径と角丸円弧の縦の直径も等しく、円の幅と高さとも等しくなります。長方形、円が描かれます。上の例のコメントを参照してください。前者は円を描画するもので、後者は円ブロックを描画するものです。
3. 立体的な長方形を描画する<br />立体的な長方形を描画するには、次の 2 つの方法があります。
draw3DRect(int x,int y,int width,int height, boolean raises): ハイライトされた四角形を描画します。このうち、xとyは四角形の左上隅の位置を指定し、パラメータwidthとheightは四角形の幅と高さ、パラメータは強調表示するかどうかを指定します。
fill3DRect(int x,int y,int width,int height,boolean raises): 強調表示された四角形を所定の色で塗りつぶします。
次のコードは、突き出た長方形を描画する例です。
g.draw3DRect(80,100,40,25,true);//ワイヤーフレームを描画 g.setColor(Color. yellow); g.fill3DRect(20,70,20,30,true);//カラーブロックを描画
4.楕円を描く<br />楕円は、楕円の横軸と縦軸によって決まります。楕円を描画するには 2 つの方法があります。
drawOval(int x, int y, int width, int height): 線で囲まれた楕円を描画します。パラメータ x と y は楕円の左上隅の位置を指定し、パラメータ width と height は水平軸と垂直軸です。
fillOval(int x, int y, int width, int height): 楕円を所定の色で塗りつぶした着色ブロックです。楕円を描く方法を使用して円を描くこともできます。横軸と縦軸が等しい場合、描かれる楕円は円になります。
次のコードは、楕円を描画する例です。
g.drawOval(10,10,60,120);//楕円を描画します g.setColor(Color.chan);g.fillOval(100,30,60,60);//円を描画します g.setColor(Color.magenta) ) ;g.fillOval(15,140,100,50);//楕円をペイントします
5. 円弧を描く
円弧を描くには 2 つの方法があります。
drawArc(int x, int y, int width, int height, int startAngle, int arcAngle): 楕円の一部として円弧線を描きます。楕円の中心は、それを囲む長方形の中心であり、パラメータは、囲む長方形の左上隅の座標 (x, y)、幅は幅、高さは高さです。パラメータ startAngle の単位は「度」で、開始角度 0 度は 3 時の位置を指します。パラメータ startAngle と arcAngle は、startAngle 角度から反時計回りに arcAngle 度の円弧が描かれることを示します。慣例により、正の度は反時計回りです。たとえば、-90 度は 6 時です。
fillArc(int x, int y, int width, int height, int startAngle, int arcAngle): setColor() メソッドで設定された色を使用して、色付きの楕円の一部を描画します。
次のコードは、円弧を描画する例です。
g.drawArc(10,40,90,50,0,180);//円弧線を描画します g.drawArc(100,40,90,50,180,180);//円弧線を描画します g.setColor(Color. yellow); g.fillArc(10,100,40,40,0,-270);//右上隅がない楕円の 4 分の 3 を塗りつぶします。 g.setColor(Color.green) g.fillArc(60,110,110,60,-90); ,- 270);//楕円の欠けている左下隅の 4 分の 3 を塗りつぶします
6. 多角形を描く<br />多角形とは、複数の線分を端から端まで接続して形成される閉じた平面図形です。多角形の線分の端点の x 座標と y 座標がそれぞれ 2 つの配列に格納されます。多角形を描くとは、与えられた座標点の順序で直線で接続することです。ポリゴンを描画するために一般的に使用される 2 つの方法は次のとおりです。
drawPolygon(int xpoints[],int yPoints[],int nPoints): 多角形を描画します
fillPolygon(int xPoints[],int yPoints[],int nPoints): setColor() メソッドで設定された色でポリゴンを色付けします。配列 xPoints[] は x 座標点を格納し、yPoints[] は y 座標点を格納します。nPoints は座標点の数です。
上記のメソッドは、多角形を自動的に閉じないことに注意してください。閉じた多角形を描画するには、指定された座標点の最後の点が最初の点と同じである必要があります。次のコードは、三角形の塗りつぶしと八角形の描画を実装します。
int px1[]={50,90,10,50};//最初と最後の点が同じ場合にのみ多角形を描画できます int py1[]={10,50,50,10}; ]={140,180,170,180,140,100,110,140}; py2[]={5,25,35,45,65,35,25,5}; g.fillPolygon(px1,py1,4); ; g.drawPolygon(px2,py2,9);
ポリゴン オブジェクトを使用してポリゴンを描画することもできます。ポリゴン クラス Polygon を使用してポリゴン オブジェクトを作成し、このオブジェクトを使用してポリゴンを描画します。 Polygon クラスの主なメソッド:
たとえば、次のコードは三角形を描画し、それを黄色の三角形で塗りつぶします。ポリゴン オブジェクトを使用して閉じたポリゴンを描画する場合、最初と最後の点が一致する必要はないことに注意してください。
int x[]={140,180,170,180,140,100,110,100}; int y[]={5,25,35,45,65,45,35,25}; .addPoint(90,50); g.drawPolygon(polygon1); g.setColor(Color. yellow); g.fillPolygon(x,y,8);
7. 長方形ブロックを消去する<br />色付きのグラフィックの中央に空の長方形が必要な場合は、長方形ブロックを背景色で塗りつぶすことができます。これは、長方形ブロック上で「消しゴム」を使用するのと同じです。方法は次のとおりです。
clearRect(int x, int y, int width, int height): パラメータで指定された長方形ブロックの色を消去します。
たとえば、次のコードは、円の中の長方形のブロックを消去する色付けを実装します。
g.setColor(Color.blue); g.fillOval(50,50,100,100); g.clearRect(70,70,40,55);
8. 描画表示領域を制限する<br />グラフの表示領域を四角形で表現します。グラフは指定された範囲内で有効である必要があり、それを超えると新たな座標値は再計算されません。部分は自動では表示されません。メソッドはclipRect(int x, int y, int width, int height)で、指定した領域にグラフィックスの表示を制限し、余分な部分は表示しません。複数の立ち入り禁止区域にまたがる場合には、立ち入り禁止区域の交差面積を求める。たとえば、次のコードを実行します。
g.clipRect(0,0,100,50);g.clipRect(50,25,100,50);
に相当
g.clipRect(50,25,50,25);
9. グラフィックのコピー<br />グラフィックをコピーするには、Graphics クラスのメソッド copyArea() を使用します。 使用形式は次のとおりです。
copyArea(int x, int y, int width, int height, int dx, int dy)、dx、dy はそれぞれ、グラフィックスを元の位置に貼り付けることによってオフセットされるピクセル数を表します。正の値は、右または右へのオフセットを意味します。負の値は左または上へのオフセットです。変位の基準点は、コピーする長方形の左上隅の座標です。
たとえば、次のコードは、1 つの四角形の一部と別の四角形全体をカスタマイズすることによるグラフィックスのコピーを示しています。
g.drawRect(10,10,60,90); g.fillRect(90,10,60,90); g.copyArea(110, 50,60,60,10,80);
[例] 小さなアプリケーションでは、テキストではなく円のブロックのみをクリアするように update() メソッドを書き換え、ウィンドウには常に移動する赤い四角形が表示されます。
import java.applet.*;import java.awt.*;public class Example7_3 extends Applet{ int i=1; public void init(){ setBackground(Color. yellow) } public voidPaint(Graphics g){ i = i +8; if(i>160)i=1; g.setColor(Color.red);g.fillRect(i,10,20,20); g.drawString("update() メソッドを学習しています",100,100); try{ Thread.sleep(100) } catch(InterruptedException e){} repaint() } public void update(Graphics g){ g .clearRect (i,10,200,100);//「update() メソッドを学習しています」をクリアしません。paint(g);
一般的な描画プログラムは、JFrame を継承して JFrame ウィンドウ サブクラスを定義し、また JPanel を継承して JPanel サブクラスを定義する必要があります。 JPanelサブクラスのpaintComponent()メソッドを再定義し、このメソッド内で描画メソッドを呼び出して、さまざまなグラフィックスを描画します。
【例】XOR描画モードを使用したアプリケーション。
import javax.swing.*;import java.awt.*;public class Example7_4 extends JFrame{ public static void main(String args[]){ GraphicsDemo myGraphicsFrame = new GraphicsDemo() }}class ShapesPanel extends JPanel{ SharpesPanel(); setBackground(Color.white); } public voidPaintComponent(Graphicsg){super.paintComponent(g); setBackground(Color. yellow); // 背景色は黄色です g.setXORMode(Color.red); // XOR 描画モードを設定し、色は赤色です g.setColor(Color.green); 20, 80 , 40); //実際の色は緑+黄色=灰色の混合色です g.setColor(Color. yellow); g.fillRect(60, 20, 80, 40); // 後半は yellow+ yellow=read、前半は yellow+gray g.setColor(Color.green); // 実際の色はgreen+ yellow Mixed color = grey. g.fillRect(60, 70, 80, 40); // 前半は (green+ yellow)+grey =背景色、後半は緑+黄色 = 灰色 g.setColor(Color.green) g.drawLine(80, 100, 180, 200); //直線は緑+黄色 = 灰色 g.drawLine( 100、100、200、200); //同上/*部分的に重なった直線を描画します。元の直線の中央部分は灰色+灰色=背景色、延長部分は緑色+黄色=灰色です。*/ g.drawLine(140, 140) , 220, 220); g. setColor(Color. yellow); //前の力と重なる次の直線の色の変化を分析します。 g.drawLine(20, 30, 160, 30); g.drawLine(20, 75, 160, 75); }}class GraphicsDemod extends JFrame{ this.getContentPane().add(new ShapesPanel()); (300, 300);