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); } }
0 件のコメント:
コメントを投稿