MyDrawCanvas.java(参考2)



/**
 * 絵を描く処理を追加した Canvas
 */
import java.awt.*;

public class MyDrawCanvas extends Canvas {

  /** コンストラクタ */
    public MyDrawCanvas() {
        setSize( 800, 600 );
        setBackground( Color.white );
    }

  /** 絵を描く処理 */
    public void paint( Graphics g ) {

        int w = getSize().width;           // キャンバスの横幅
        int h = getSize().height;          // キャンバスの高さ
        int r = h/5;                       // 図形のサイズ
        int x;      // 最初のX座標
        int y;      // 最初のY座標
        int red;    // 最初の色(赤成分)
        int green;  // 最初の色(緑成分)
        int blue;   // 最初の色(青成分)
        int dx, dy;      // 位置の変化
        int dr, dg, db;  // 色の変化

      // ランダムに移動する正方形
        x = (int)( (w-r) * Math.random() );
        y = (int)( (h-r) * Math.random() );
        red = (int)( 256 * Math.random() );
        green = (int)( 256 * Math.random() );
        blue = (int)( 256 * Math.random() );
        for( int i=0; i<200; i++ ) {
            dx = (int)( r * 0.5 * ( Math.random() - 0.5f ) );
            dy = (int)( r * 0.5 * ( Math.random() - 0.5f ) );
            dr = (int)( 32 * ( Math.random() - 0.5f ) );
            dg = (int)( 32 * ( Math.random() - 0.5f ) );
            db = (int)( 32 * ( Math.random() - 0.5f ) );
            x+=dx;  y+=dy;
            red+=(dr+256); red%=256;
            green+=(dg+256); green%=256;
            blue+=(db+256); blue%=256;
            Color color = new Color( red, green, blue );
            g.setColor( color );
            g.drawRect( x, y, r, r );
        }

      // ランダムに移動する円
        x = (int)( (w-r) * Math.random() );
        y = (int)( (h-r) * Math.random() );
        red = (int)( 256 * Math.random() );
        green = (int)( 256 * Math.random() );
        blue = (int)( 256 * Math.random() );
        for( int i=0; i<200; i++ ) {
            dx = (int)( r * 0.5 * ( Math.random() - 0.5f ) );
            dy = (int)( r * 0.5 * ( Math.random() - 0.5f ) );
            dr = (int)( 32 * ( Math.random() - 0.5f ) );
            dg = (int)( 32 * ( Math.random() - 0.5f ) );
            db = (int)( 32 * ( Math.random() - 0.5f ) );
            x+=dx;  y+=dy;
            red+=(dr+256); red%=256;
            green+=(dg+256); green%=256;
            blue+=(db+256); blue%=256;
            Color color = new Color( red, green, blue );
            g.setColor( color );
            g.drawArc( x, y, r, r, 0, 360 );
        }
    }

  /** 最初に呼び出されるメソッド(テスト用) */
    public static void main( String[] argv ) {
        MyDrawCanvas canvas = new MyDrawCanvas();
        Frame frame = new Frame( "My Canvas" ); 
        frame.add( canvas, "Center" );
        frame.pack();
        frame.show();
    }
}