トップ 一覧 検索 ヘルプ RSS ログイン

キャンバスの変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
!! キャンバス

Canvasクラスはその名が示すとおり、描画を行うためのキャンバスのような役割をするコンポーネントです。アプリケーションが描画を行うことのできる四角い領域を表します。
通常はキャンバスクラスを継承したクラスをつくり、それをコンポーネントとしてアプレットに追加します。

''Sample29.java''
{{pre num
/* <applet code="Sample29.class" width="100" height="100"></applet> */
import java.applet.Applet;
import java.awt.*;

public class Sample29 extends Applet{
    // コンポーネントクラスの変数を定義
    SampleCanvas sampleCanvas;
    
    public void init(){
        // キャンバスオブジェクトの作成と初期化
        sampleCanvas = new SampleCanvas();
        
        // レイアウトの設定
        this.setLayout( new BorderLayout());
        
        // コンポーネントをアプレットのコンテナに追加
        this.add( sampleCanvas);
    }
}
}}

1行目から19行目はいままでのコンポーネントと同様に、オブジェクトを作成してアプレットに追加する処理を記述しています。一つ注意が必要で、14行目のレイアウトの設定を行わないと、デフォルトである FlowLayout が適用されます。FlowLayout のもとで Canvas をアプレットに追加してもキャンバスのサイズが 0 × 0 に設定されてしまい、画面に何も表示されません。

''SampleCanvas.java''
{{pre num
import java.awt.*;

public class SampleCanvas extends Canvas{
    /** 円の半径 */
    int radius = 50;
    
    /*
     * 球の半径を設定します。
     */
    public void setRadius( int r){
        this.radius = r;
    }
    
    /*
     * 描画処理を記述します。
     * @see java.awt.Canvas#paint(java.awt.Graphics)
     */
    public void paint( Graphics g){
        int w = this.getWidth();
        int h = this.getHeight();
        
        // キャンバスの中心に青い球を表示
        g.setColor( Color.BLUE);
        g.fillOval( w/2-radius/2, h/2-radius/2, radius, radius);
    }
}
}}

SampleCanvas.java では Canvas クラスを継承した SampleCanvas クラスを作成しています。18行目から25行目で、キャンバスへの描画を行うpaint() メソッドのオーバーライドを行っています。オーバーライドとは、あるクラスで定義されているメソッドを、継承したクラスで再定義することです。Canvasクラスでは、paint() メソッドは単に背景色で矩形領域を塗りつぶすように定義されています。我々はそれを、円を描くように定義しなおしました。これがメソッドのオーバーライドです。

Sample29.java の実行結果は図33のようになります。

{{ref_image fig033.png}}
'''図 33:''' Sample29 の実行結果