![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
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で質問しましょう!
似たような質問が見つかりました
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- Java java 引数 戻り値のあるメソッド 3 2023/02/12 06:23
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
- 物理学 この問題における抵抗r1とxってどのように考えれば良いのでしょうか?トルクはT=P2/ωsなのでP2 1 2022/06/19 18:46
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- レトロゲーム テレビゲームICOで手を繋いでもすぐに離れてしまうことに関して 1 2022/08/07 21:37
- Visual Basic(VBA) VBAで最新のデータを別シートに転記する方法をお教えください。 3 2022/04/07 19:20
- Excel(エクセル) エクセルで書式設定とフィルタの組み合わせでうまく行かないのですが 4 2022/10/07 10:02
- C言語・C++・C# 大量のデータを読み込んで表示する速度を改善したい 8 2023/05/07 13:29
- Java Java プログラム public class Main { public static void 3 2023/08/10 23:46
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C#で、あるクラスのメンバーす...
-
Junitテストでvoid戻り値メッソ...
-
大量のデータを読み込んで表示...
-
【C#】ソースコードをファイル...
-
ボタンの複数割り当てについて
-
.Net Compact でのダブルバッフ...
-
【Java】画像表示が出来ない!
-
C# WinForm のDataGridView Cel...
-
C#でのWNetAddConnection3の使...
-
C# 親フォームで指定した値を...
-
C++基底クラスに戻り値の異なる...
-
Processingでマウスクリックで...
-
BufferedImageへの変換エラーです
-
JAVAのキーアクションについて
-
C# visibleプロパティをfalseに...
-
GetDIBits関数の使い方について
-
ピクチャボックスのクリックイ...
-
エンターキーを押すとOKボタン...
-
二分探索木の要素の数を数える...
-
次のVB.netのコードをC#で書く...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C#で、あるクラスのメンバーす...
-
大量のデータを読み込んで表示...
-
Junitテストでvoid戻り値メッソ...
-
Processingでマウスクリックで...
-
C#でのWNetAddConnection3の使...
-
ボタンのイベントで異なるウィ...
-
C#で別のFormへ複数の値を返そ...
-
【Java】画像表示が出来ない!
-
GetDIBits関数の使い方について
-
ボタンの複数割り当てについて
-
Thread.sleepのInterruptedExce...
-
C# DataGridView列カスタマイズ
-
C# MouseHoverを何度も呼ぶには
-
正規表現
-
unityでのC++エラーの原因がわ...
-
C#でキーイベントが発生しない...
-
C#から、C++で作成したdll内の...
-
C# 矢印キーの取得
-
C# visibleプロパティをfalseに...
-
JavaFXでの表内のチェックボッ...
おすすめ情報