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

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){}
}

A 回答 (2件)

めんどくさいので「長方形が2つ出てしまう」ことについてヒントだけ:



「長方形が 2つ出る」ってことは, 当然だけどプログラム中で「2つ (以上) 描いている」ってこと. 「長方形の内部をクリック」したときに
・それぞれのフィールドの値がどのようになるのか
・プログラムの実行の流れはどうなるのか
を考えてみてください.
    • good
    • 0
この回答へのお礼

「長方形が 2つ出る」ところについて、改善できました。
ありがとうございました。

お礼日時:2014/03/05 00:00

なにがどう「うまくいかない」んでしょうか?

この回答への補足

・1度長方形内部で何か動作をすると、それ以降長方形が2つ出てしまう。
・長方形外部でクリックやマウスボタンを押したりドラッグすると、長方形が移動してしまう。
・しばらく操作していると、長方形が左または上に行って消えてしまう。
・ドラッグ操作が滑らかでない。
などです。
とにかく意図しない方向に移動してしまいます。

補足日時:2014/03/01 01:53
    • good
    • 0

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