ぼんさい塾

ぼんさいノートと補遺に関する素材や注釈です.ミスが多いので初稿から1週間を経た重要な修正のみ最終更新日を残しています.

Java のプログラム (24)

2012-03-09 00:42:08 | 暮らし

記事一覧
ソースコードについて

6.2 コンポーネントへの描画

描画する領域を

の jPanel2 内に限定したアプレットを作ってみましょう.

アプレットでは親クラスの関数はオーバーライドするときしか書かないので,全体の処理の流れは
[5-17] を参照してください.swing のコンポーネントに描画するときは [5-18] に書かれている
ように paintComponent() を用います.また [5-19] のように描画クラスを独立させると,デスク
トップアプリケーションにもそのまま流用できます.

//------------------------------------------
//Draw.java
package draw;
import java.awt.*;                    // キー入力
public class Draw extends javax.swing.JApplet {
    Fig fp;                           // キー入力
    /** Initializes the applet Draw */
    public void init() {
        try {
            java.awt.EventQueue.invokeAndWait(new Runnable() {
                public void run() {
                    initComponents();
                    fp = new Fig();   // キー入力
                    jPanel2.add(fp);  // キー入力
                }
            });
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
    public void paint(Graphics g){    // キー入力
        fp.paintComponent(g);         // キー入力
    }                                            // キー入力

    @SuppressWarnings("unchecked")
    //
 ********** 省略(編集不能の自動生成部: 70 行)**********
    }//

    private void jButton1MouseClicked(java.awt.event.MouseEvent evt) {                                     
        fp.x += 5; fp.y -= 5; fp.repaint();        // キー入力
    }                                    

    private java.awt.Canvas canvas1;
    private javax.swing.JButton jButton1;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel2;
}
//------------------------------------------
//Fig.java
package draw;
import javax.swing.* ;
import java.awt.*;
public class Fig extends JPanel {
    int x, y;
    public Fig(){
        setBackground(Color.yellow);
        setBounds(20, 20, 200, 200);
        x = y = 0;
    }
    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.drawLine(0, 0, 100, 100);
        g.setColor(Color.red);
        g.drawOval(50+x, 50+y, 100, 100);
    }
}
//------------------------------------------
//draw.html (全角の不等号は半角にしてください)
HTML><BODY
    applet height=250 width=400 code="Draw.class"></applet
/BODY></HTML 
//------------------------------------------

draw.html の表示内容は

のようになります.このプログラムで Fig クラスのオブジェクトを jPanel2 に収納しているのは
デザイン画面でプロパティ(サイズ,背景色,枠 etc)の設定をするためです.分かり易いように
Fig と JPanel のサイズ,背景色を変えていますが,サイズを合わせて Fig のプロパティを規定値
にすると楽です.

jButton1 をクリックすると円が移動します.このイベントハンドラはデザイン画面で MouseClicked
のイベントを選ぶとキー入力は「fp.x += 5; fp.y -= 5;」だけで済みます.

補足: JApplet の代わりに JFrame を用いるときも同様です.ContentPane は不変であることは
jButton2 を追加し MouseClicked で getContentPane().setBackground(Color.cyan); を実行
させれば確認できます.



実行用ファイルは http://www.hakurei-isl.org/m-miyata/applet/draw.html にあります.

資料 [5-11]~[5-16] は [6-1]~[6-6] と読み変えてください.(不等号の処理が面倒なので
手抜きします.幸い「このプログラムは応答していません」になりませんが,太字のタグが消えたり
CRLF が LF になる等の煩わしさは残っています.)
[6-7] javadrive: Applet(アプレット)入門 > アプレットの基本 > アプレットの基本メソッド
  http://www.javadrive.jp/applet/basic/index6.html
  init, start, stop, destroy, paint, repaint, update.
[6-8] JAVA塾:Java入門 > 第4篇 Javaアプレット > アプレットの記述
  http://www1.megaegg.ne.jp/~yasu/Programmer's%20Page/applet/appletKijyutu.html
  contentPaneという窓で処理されます。直接JFrameやJAppletにコンポーネントを置くことはしません。
[6-9] 5.描画エリアを単独のクラスにしよう
  http://light21.s26.xrea.com/paintjava/chap05.html