おえかき その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!ログール |