@634

おえかき その4 直線たくさん

Advertisement

直線を管理するクラス

はいはーい。たくさんの直線書くぞ。まず、一本の直線の情報を管理するクラスをつくるぞ。
class LineData{
    private int sx, sy;  //始点座標
    private int ex, ey;  //終点座標

    //値代入するトコ。
    public LineData(int x1, int y1, int x2, int y2){
        sx = x1;
        sy = y1;
        ex = x2;
        ey = y2;
    }

    //描画するトコ。
    public void Draw(Graphics g){
        g.drawLine(sx, sy, ex, ey);
    }
}
はいできたー。テキトー。まぁ、なんとかなる。

合体。

あとは、LineDataのオブジェクトを保持しておく配列つくって、オブジェクト作るごとに代入。
そりと、あれだ。paint()メソッドオーバライドして描画処理。
あー、説明ヘタだな。

流れ。
1:ボタンをクリックしたトコが直線の始点座標
2:そのままドラッグしてボタンを離したトコが終点座標。ここでLineDataオブジェクト生成して、配列に代入。
3:再描画。
4:paint()メソッドで描画。配列の中のDraw()メソッド呼び出し。
import java.awt.*;
import java.awt.event.*;

public class Gr{
    public static void main(String args[]){
        mainFrame f = new mainFrame();
        f.setSize(400, 300);
        f.setTitle("タイトル");
        f.show();
    }
}

class mainFrame extends Frame implements WindowListener, MouseListener{
    int x, y;
    LineData[] ldArray = new LineData[10];
    int ldCount = -1;

    mainFrame(){
        addWindowListener(this);
        addMouseListener(this);
    }

    public void paint(Graphics g){
        for(int i = 0; i <= ldCount; i++){
            ldArray[i].Draw(g);
        }
    }

    public void mousePressed(MouseEvent e){
        x = e.getX();
        y = e.getY();
    }

    public void mouseReleased(MouseEvent e){
        ldCount += 1;
        ldArray[ldCount] = new LineData(x, y, e.getX(), e.getY());
        repaint();
    }

    public void windowClosing(WindowEvent e){
        System.exit(0);
    }

    public void windowOpened(WindowEvent e){}
    public void windowClosed(WindowEvent e){}
    public void windowIconified(WindowEvent e){}
    public void windowDeiconified(WindowEvent e){}
    public void windowActivated(WindowEvent e){}
    public void windowDeactivated(WindowEvent e){}

    //MouseListenerのメソッドは全部実装
    public void mouseEntered(MouseEvent e){}
    public void mouseExited(MouseEvent e){}
    public void mouseClicked(MouseEvent e){}
}

class LineData{
    private int sx, sy;
    private int ex, ey;

    public LineData(int x1, int y1, int x2, int y2){
        sx = x1;
        sy = y1;
        ex = x2;
        ey = y2;
    }

    public void Draw(Graphics g){
        g.drawLine(sx, sy, ex, ey);
    }
}
でけた。実行結果↓
実行結果

ちなみに、配列作ってるトコ(LineData[] ldArray = new LineData[10];)の要素数が書ける直線の数だから、要素数を超えた分の直線書こうとしたとこでArrayIndexOutOfBoundsExceptionがでるーよー。

次回、対策しまっす。

あ、そーだ。今んトコ書いた線の消去ができないからー、つくりたいやつは作れ。
//画面消去
for(int i = 0; i < ldArray.length; i++){
    ldArray[i] = null;
}
ldCount = -1;
repaint();
mouseExited()にでも書いとけばイイと思いますが。

※mouseExited():マウスカーソルがウィンドウ外に出たときのイベント

Advertisement

ショートカット

634
634ブログ
このカテゴリのトップページに戻る
Incubator(Pukiwiki)
634ラボ
   UIコレクションギャラリー
   ZO-3ジェネレーター

サイト検索


Y!ログール

ビリヤード