AWTで図形を描画してみます。
AWTのコンポーネントの描画はすべてJavaで行われているわけではなく、WindowsであればWIN32APIを使用しているため、
ButtonクラスのpaintメソッドをオーバーライドしてもButtonのデザインを変更することはできません。
AWTではGUIの表示を変更することができません。
※Swingではすべての描画がJavaで行われいるので、GUIの表示を変更することが可能です。
AWTの描画の仕組みは、コンポーネントで再描画の要求があるとrepaint、Update、Paintの順に描画メソッドが呼び出されていきます。
FrameクラスのpaintメソッドをオーバーライドしてFrameに図形を描画してみます。
paintメソッドの引数Graphicsクラスには下記のような描画メソッドが用意されています。
drawRect(横位置, 縦位置, 横幅, 縦幅) | 枠線のみの四角を描画します。 |
fillRect(横位置, 縦位置, 横幅, 縦幅) | 塗りつぶした資格を描画します。 |
drawOval(横位置, 縦位置, 横幅, 縦幅) | 枠線のみの円を描画します。 |
fillOval(横位置, 縦位置, 横幅, 縦幅) | 塗りつぶした円を描画します。 |
drawLine(開始横位置,開始縦位置, 終了横位置, 終了縦位置) | 直線を描画します。 |
drawRoundRect(横位置, 縦位置, 横幅, 縦幅, 丸みの横幅, 丸みの縦幅) | 枠線のみの角が丸い四角を描画します。 |
fillRoundRect(横位置, 縦位置, 横幅, 縦幅, 丸みの横幅, 丸みの縦幅) | 塗りつぶした角が丸い四角を描画します。 |
draw3DRect(横位置, 縦位置, 横幅, 縦幅, boolean) | 枠線が立体的な四角を描画します。第5引数のboolean型には凸であればtrue。凹であればfalse。 |
drawArc(横位置, 縦位置, 横幅, 縦幅, 開始角度, 描画角度) | 円弧を描画します。開始角度、描画角度はは3時の位置を0として、反時計周りに算出した円弧の角度を指定します。 |
fillArc(横位置, 縦位置, 横幅, 縦幅, 開始角度, 描画角度) | 扇型を描画します。開始角度、描画角度はは3時の位置を0として、反時計周りに算出した円弧の角度を指定します。 |
drawPolyLine(int配列1, int配列2, int配列3) | 開いた多角形の線分を描画します。 |
drawPolygon(int配列1, int配列2, int配列3)
drawPolygon(Polygon) | 閉じた多角形の線分を描画します。 |
fillPolygon(int配列1, int配列2, int配列3)
fillPolygon(polygon) | 閉じた多角形を塗りつぶして描画します。 |
VisualEditorを利用してFrameを作成します。
ソースコードの「extends Frame」にカーソルを置いた状態で
eclipseメニューの「ソース」より「メソッドのオーバーライド/実装」を選択します。
起動した画面より「Container」の「paint(Graphics)」をチェックONにし「OK」ボタンをクリックします。
ソースコードのPaintメソッドに描画コードを記述します。
package graphicsSample;
import java.awt.Color;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Polygon;
public class GraphicsSample01 extends Frame {
private static final long serialVersionUID = 1L;
@Override
public void paint(Graphics g) {
// TODO 自動生成されたメソッド・スタブ
//super.paint(g);
g.setColor(Color.red);
//枠線のみの四角形を描画します。
g.drawRect(50,50,50,50);
//塗りつぶした四角形を描画します。
g.fillRect(120, 50, 50, 50);
g.setColor(Color.blue);
//枠線のみの円を描画します。
g.drawOval(50,120,50,50);
//塗りつぶした円を描画します。
g.fillOval(120, 120, 50, 50);
g.setColor(Color.black);
//直線を描画します。
g.drawLine(50, 190, 150, 190);
g.setColor(Color.orange);
//枠線のみの角の丸い四角を描画します。
g.drawRoundRect(50, 260, 50, 50, 20,20);
//塗りつぶした角の丸い四角を描画します。
g.fillRoundRect(120, 260, 50, 50, 20,20);
g.setColor(Color.lightGray);
//枠線が浮き出した四角を描画します。
g.fill3DRect(50, 330, 50, 50, true);
//枠線がへこんだ四角を描画します。
g.fill3DRect(120, 330, 50, 50, false);
g.setColor(Color.magenta );
//円弧を描画します。
g.drawArc(50, 400, 50, 50, 0, -90);
//扇型を描画します。
g.fillArc(120, 400, 50, 50, 0, -90);
g.setColor(Color.cyan);
//(50,470)、(100,520)、(150,470)、(200,520)の4点を結ぶ折れ線を描画します。
int p = 4;
int[] x = {50,100,150,200};
int[] y = {470,520,470,520};
g.drawPolyline(x, y, p);
//(50,590),(100,640),(150,590),(200,640)の4点を結ぶ多角形を描画します。
Polygon pol1 = new Polygon();
pol1.npoints = 4;
pol1.xpoints = new int[]{50,100,150,200};
pol1.ypoints = new int[]{590,640,590,640};
g.drawPolygon(pol1);
//(50,650),(100,700),(150,650),(200,700)の4点を結ぶ塗りつぶした多角形を描画します。
Polygon pol2 = new Polygon();
pol2.npoints = 4;
pol2.xpoints = new int[]{50,100,150,200};
pol2.ypoints = new int[]{590,640,590,640};
g.fillPolygon(pol2);
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO 自動生成されたメソッド・スタブ
new GraphicsSample01();
}
/**
* This is the default constructor
*/
public GraphicsSample01() {
super();
initialize();
}
/**
* This method initializes this
*
* @return void
*/
private void initialize() {
this.setSize(300, 700);
this.setTitle("Frame");
this.setVisible(true);
}
}