重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

最近プログラミングを習いだし、1つずつ色々独学で学んでいて、
本に載っている範囲で勉強しているます。
ここから下のプログラミングでは1つしか線を1つしか引けないのですが、これを何個も線を引くようにするにはどうすればいいか教えてください!

mport java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Challnege13 extends JApplet {

private static final long serialVersionUID = 1L;
int Px=0,Py=0; // 直前の位置。
int Cx,Cy; // 現在の位置。
JPanel p;

// initメソッドの定義。
public void init() {
// アプレットからコンテンツペインを取得。
Container c = this.getContentPane();
// コンテンツペインのレイアウトマネージャをBorderLayoutに設定。
c.setLayout(new BorderLayout());

// パネルを定義(匿名クラス)。
p = new JPanel() {
/**
*
*/
private static final long serialVersionUID = 1L;

public void paintComponent(Graphics g) {
super.paintComponent(g);
// 直線描画。
if( (Px == 0)&&(Py == 0) ) { Px = Cx; Py = Cy; }
g.drawLine(Px,Py,Cx,Cy);
// 直前の位置を更新。
Px = Cx; Py = Cy;
}
};
// コンテンツペインに追加。
c.add(p,BorderLayout.CENTER);

// イベントリスナを定義(匿名クラス)。
MouseAdapter ma = new MouseAdapter() {
// mouseClickedメソッドの定義。
public void mouseClicked(MouseEvent e) {
Cx = e.getX(); // クリックした点のx座標を取得する。
Cy = e.getY(); // クリックした点のy座標を取得する。
p.repaint();
}
};
// イベントリスナの登録。
this.addMouseListener(ma);
}
}

A 回答 (1件)

クリックした順につなぐだけでいいのでしたら


ArrayListなどでクリックしたポイントを覚えておいて
paintComponentでその順に描画すれば良いでしょう

Challnege13 のメンバーに
ArrayList<Point> myList = new ArrayList<Point>();
を追加

mouseClickedハンドラで
Point pt = new Point( Cx, Cy );
myList.add( pt );
を追加

paintComponentのオーバーライドの中身を
int nLen = myList.Size();
if ( nLen < 1 ) {
  return;
}
Point[] pts = new Point[ nLen ];
myList.ToArray( pts );
for( int n = 1; n < nLen; n++ ) {
  g.drawLine( pts[n-1].x, pts[n-1].y, pts[n].x, pts[n].y );
}
といった具合でしょう
    • good
    • 0
この回答へのお礼

ありがとうございます!
今も邁進しておりますので、またわからないことがあったらよろしくお願いしますw

お礼日時:2008/11/27 00:37

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!