図形の描画

もっとも単純に

まずは,もっとも単純に円や四角形を書いてみます。

Windowシステムにはいろいろ面倒な事があります。windowはユーザーの操作により上下が変わりますから,再び上になったときに再描画が必要になります。ここでのやり方はこのことを考慮していませんのでswingの使い方として正しくありません。

クリックすると描く

プログラム名 DrawTest.java

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

public class DrawTest extends JFrame implements ActionListener{
    JButton mybtn;
    JPanel mypnl;
    public DrawTest() {
        setDefaultCloseOperation(EXIT_ON_CLOSE); //終了処理を追加
        setSize(400,300);
        setTitle("クリックで描画");
        mybtn = new JButton("draw");
        mypnl = new JPanel();
        mypnl.setBackground(Color.white);

        setLayout(new BorderLayout());
        add(mypnl, BorderLayout.CENTER);
        add(mybtn,BorderLayout.SOUTH);

        mybtn.addActionListener(this);
        setVisible(true);
    }
    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == mybtn) {
            Graphics myg = mypnl.getGraphics();
            myg.setColor(new Color(0,0,255));
            for(int i=0; i*2<300; i=i+10){
                myg.drawOval(i*2,i,20,10);
            }
        }
    }
    public static void main(String[] args){
        DrawTest myframe = new DrawTest();
    }
}

実行するとボタン付きの枠だけができます。ボタンをクリックすることで楕円をたくさん表示します。

単なるフレーム

drawOval の代わりに、drawRect を使えば四角形を描くことができますし、fillOval を使えば、塗りつぶした楕円を描くことができます。

myg.drawRect(30,40,50,60);
    //(30,40)の所に、幅50、高さ60の四角を描く

次を試してください。

drawLine(int x1,int y1,int x2,int y2) 直線を引く
drawRect(int x,int y,int width,int height) 長方形を描画
drawOval(int x,int y,int width,int height) 楕円を描画
setColor(Color color) 描画に使う色を設定する
fillRect(int x,int y,int width,int height) 長方形を塗りつぶす
fillOval(int x,int y,int width,int height) 楕円を塗りつぶす
drawString(String str,int x,int y) 文字列を描画する

drawLineメソッドは直線の始点(x1,y1)、終点(x2,y2)を引数として指定します。 引数がx,y,width,heightであるものはx,yを左上の角とする幅w高さhの四角形の中に長方形や楕円を描きます。

Javaを始め、多くのプログラム言語では、描画位置指定の座標は左上が(0,0)になります。

このプログラムの問題点

Windowが他のWindowの下になって隠れ、再び上になったときに描いた画がなくなります。(drawボタンで再描画されます)

Windowの大きさを変える場合も同様です。

単なるフレーム

単なるフレーム

しかし、ボタンの部分は消えていません。ちゃんと元に戻っています。JButtonには隠されてから、再び上になったときに書き直す仕組みがあるのです。

実はJPanelにもこの仕組みが備わっているのです。それを活かすには決まりにしたがった書き方をしなければなりません。これは次のページで学びます。

課題

1.

上記の DrawTest.java をつくり実行してみなさい

ファイル名 DrawTest.java

2.

DrawTest.java のdrawOvalをdrawRectやfillOvalなどに変えたり,新たにforの外にdrawOvalなどを書いて,図形を増やしてみなさい

ファイル名 DrawTest2.java

もくじ

Javaプログラミング
聖愛中学高等学校
http://www.seiai.ed.jp/
Dec.2003
Oct.2009
Oct.2011