@634

おえかき その3 直線を描く

Advertisement

パッケージインポート

今回は簡単だ。直線をかくだけ。ウィンドウ上(フレーム内)でマウスのボタンおしたトコからー、ドラッグして話したトコまでの線を書く、と。

線を引くのはdrawLine()。drawLine()はGraphicsクラスだ。 Graphicsのパッケージはjava.awt.Graphicsだから、そーだ。
import java.awt.Frame;
import java.awt.Grahpics;
ダブってるから一個にしちゃお。
import java.awt.*;
そしたら、あとでメニューとかつくるときもラクだ。
ワイルドカード使わないで全部指定する人ってなんなんだろ?ポリシー?

リスナ追加

「マウスのボタン押した。」とか「マウスのボタン離した。」とかは、MouseListenerを使うぞー。
おし、とりあえずリスナー実装するぞ。のトコまで。処理はまだなしー。
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{
    mainFrame(){
        addWindowListener(this);
        addMouseListener(this);
    }

    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 mousePressed(MouseEvent e){}
    public void mouseReleased(MouseEvent e){}
    public void mouseEntered(MouseEvent e){}
    public void mouseExited(MouseEvent e){}
    public void mouseClicked(MouseEvent e){}
}
実行しても、前回となにも変わらず。

描画処理

とりあえずー、今んトコは直線が一本だけ書ければいいや。
直線管理するクラス作って、んー、

考えた時点でなんとなくダメダメなので、作るのパスしよっと。
文句あるなら、続きんトコやれ。

…と思ったけどなんとなく作った。でもやっぱりダメだった。いや、やりたいコトはできてるんだけどね。構造がなっとくいかないような…。なんだろ。何かが違うな。
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{
    LineData ld = new LineData();

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

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

    public void mousePressed(MouseEvent e){
        ld.setS(e.getX(), e.getY());
    }

    public void mouseReleased(MouseEvent e){
        ld.setE(e.getX(), e.getY());
        repaint();
    }

    public void paint(Graphics g){
        ld.Draw(g);
    }

    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){}
    public void mouseEntered(MouseEvent e){}
    public void mouseExited(MouseEvent e){}
    public void mouseClicked(MouseEvent e){}
}

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

    public LineData(){
        sx = -1; sy = -1;
        ex = -1; ey = -1;
    }

    public void setS(int x, int y){
        sx = x; sy = y;
    }

    public void setE(int x, int y){
        ex = x; ey = y;
    }

    public void Draw(Graphics g){
        if(sx != -1 && sy != -1 && ex != -1 && ey != -1){
            g.drawLine(sx, sy, ex, ey);
        }
    }
}

Advertisement

ショートカット

634
このカテゴリのトップページに戻る
634labs
   UIコレクションギャラリー

サイト検索

Google

Web サイト内

Y!ログール