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){}
}
No.2ベストアンサー
- 回答日時:
めんどくさいので「長方形が2つ出てしまう」ことについてヒントだけ:
「長方形が 2つ出る」ってことは, 当然だけどプログラム中で「2つ (以上) 描いている」ってこと. 「長方形の内部をクリック」したときに
・それぞれのフィールドの値がどのようになるのか
・プログラムの実行の流れはどうなるのか
を考えてみてください.
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Junitテストでvoid戻り値メッソ...
-
C#で、あるクラスのメンバーす...
-
クリックして頂点を線で結ぶ
-
ユーザーコントロールを動的に...
-
C#で別のFormへ複数の値を返そ...
-
C# OpenFileDialogがコンパイ...
-
GetDIBits関数の使い方について
-
C# visibleプロパティをfalseに...
-
C#でのWNetAddConnection3の使...
-
javaを用いて,a列,b列の空白...
-
C++基底クラスに戻り値の異なる...
-
C# 矢印キーの取得
-
ダブルクォーテーションのrepla...
-
System.err. printlnとSystem.o...
-
C言語のポインターに関する警告
-
ORA-01858: 数値を指定する箇所...
-
Path型をString型へ変換する(Java)
-
ダブルクォーテーションを含む...
-
変数を動的に利用するには?
-
Log4jで機能毎に別ファイルへ出...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
大量のデータを読み込んで表示...
-
C#で、あるクラスのメンバーす...
-
Junitテストでvoid戻り値メッソ...
-
C#でのWNetAddConnection3の使...
-
C# 矢印キーの取得
-
C#で別のFormへ複数の値を返そ...
-
C# DataGridView列カスタマイズ
-
GetDIBits関数の使い方について
-
C# バイナリダンプを構造体に簡...
-
[C#.net]スレッド化された別フ...
-
ボタンの複数割り当てについて
-
C# タスクバーを隠したフォーム...
-
C# visibleプロパティをfalseに...
-
C# 半角カナの文字化けについて
-
C#でキーイベントが発生しない...
-
C# MouseHoverを何度も呼ぶには
-
C#から、C++で作成したdll内の...
-
StrutsのiterateタグでListに格...
-
コンボボックスを使う時の警告
-
ボタンのイベントで異なるウィ...
おすすめ情報