長方形をドラッグするJavaアップレット
Javaアップレットについてです。長方形の内部でドラッグすることで、長方形を移動できるプログラ厶を作りたいのですが、うまくいきません。どうしても分からないので、改善点がありましたらアドバイスをお願いします。
詳しい仕様は、
・長方形の内部でマウスボタンを押し、マウスボタンを押したままマウスを移動すると、移動した量だけ長方形を移動して表示する。
・マウスボタンを離すと、その位置に長方形を描く。
・長方形を持ち上げている感じを出すために、マウスボタンを押したときとドラッグ中は、長方形を正確な位置から少しずらして表示し、その下に影を描く。
です。
プログラ厶は以下のとおり
import java.awt.*;
import java.applet.*;
import java.awt.event.*;
public class ex1118 extends Applet implements MouseListener, MouseMotionListener{
//長方形の最初の位置
Rectangle r1 = new Rectangle(80,100,80,60);
//マウスボタンを押した位置
Point p1;
//マウスボタンを離した位置
Point p2;
//長方形の内部にあるかどうか
boolean enter = false;
public void init(){
addMouseListener(this);
addMouseMotionListener(this);
}
public void paint(Graphics g){
g.fillRect(r1.x, r1.y, r1.width, r1.height);
if(enter){
//影をつける
g.setColor(Color.gray);
g.fillRect(p1.x, p1.y, r1.width, r1.height);
//少しずらす
g.setColor(Color.black);
g.fillRect(p1.x - 10, p1.y - 10, r1.width, r1.height);
}
else if(!enter){
r1.x = r1.x + (p2.x - p1.x);
r1.y = r1.y + (p2.y - p1.y);
g.fillRect(r1.x, r1.y, r1.width, r1.height);
}
}
public void mousePressed(MouseEvent e){
enter = r1.contains(e.getPoint());
if(enter)
p1 = e.getPoint();
p2 = null;
repaint();
}
public void mouseDragged(MouseEvent e){
if(enter)
p2 = e.getPoint();
repaint();
}
public void mouseReleased(MouseEvent e){
enter = false;
p2 = e.getPoint();
repaint();
}
public void mouseClicked(MouseEvent e){}
public void mouseEntered(MouseEvent e){}
public void mouseExited(MouseEvent e){}
public void mouseMoved(MouseEvent e){}
}
お礼
そんなメソッドがあるんですか! ありがとうございました!