javaのイベント処理についての質問
今、以下の課題に取り組んでいるのですが、「新しくクリックした座標点で円を描くだけでなく、 以前にクリックした座標点での円も全て表示するように」というところのプログラミング方法がわかりません。
現在のソースは実行してもクリックしたところに円が表示されるようにできたのですが、別の場所をクリックすると以前の円は消えてしまいます。
どなたか詳しい方教えていただけませんでしょうか。
問題文↓
図のように、マウスクリックした位置に円を描くアプレットを作成せよ。円の数は最大10個までとする。なおマウスクリックした位置は、
public void mouseClicked(MouseEvent e)
とすると
e.getX();
e.getY();
というメソッドでint型のx,y座標点として得られる。
クリックした座標点を記憶しておくために、点の位置は、xp[i]、yp[i]のように配列を使用し、新しくクリックした座標点で円を描くだけでなく、 以前にクリックした座標点での円も全て表示するように、プログラムを作成すること。
なお、メソッドmouseClicked(MouseEvent e)とメソッドpaint(Graphics g)に共通して座標点を扱うために座標点はグローバル宣言を必要とする。
ソース
import java.awt.*;
import java.awt.event.*;
import java.applet.Applet;
public class Marble extends Applet {
int xp;
int yp;
public void init(){
MsListener mouseListener=new MsListener();
setBackground(Color.white);
addMouseListener(mouseListener);
}
class MsListener extends MouseAdapter{
public void mouseClicked(MouseEvent e){
xp=e.getX();
yp=e.getY();
repaint();
}
}
public void paint(Graphics g){
final int MAX=20,WIDTH=200,HEIGHT=200;
g.draw3DRect(0,0,WIDTH-2,HEIGHT-2,false);
g.setColor(Color.blue);
g.fillOval(xp-5,yp-5,10,10);
}
}
どうかよろしくお願いします。
補足
すみません。説明がややこしかったですね。 RGB値を取りだしたいのではなく、座標を取りだしたいのです。 例えば、3000,2000の画像の場合、ディスプレイで表現しきれないため、スクロールバーや拡大・縮小を使うのがいいかと思います。 しかし、MouseEventを用いるとFrameやJFrame上の座標を返してくれますが、表示画像の座標を返してくれるわけではないので、Frameが800,600に対して、スクロールして画像座標3000,2000の部分をマウスポインタでクリックしても、800,600しかreturnしてくれないと思います。 その点を改善したいのですが。。。