2011-11-20 57 views
2

我想移動一個矩形,但我不知道該怎麼做,我知道這是'mouseClicked(MouseEvent e)',但不知道如何使用它。這是我到目前爲止的代碼:如何在Java中移動矩形?

import java.applet.*; 
import java.awt.*; 
import java.awt.event.*; 

public class MovRect extends Applet implements MouseMotionListener, MouseListener { 
Color color = Color.green; 
int x=30,y=30,w=150,l=150; 
String MouseMotion =""; 

public void init() 
{ 
    addMouseListener(this); 
    addMouseMotionListener(this); 
} 
public void paint(Graphics g) 
{ 
    super.paint(g); 

    g.setColor(color); 
    g.drawRect(x, y, w, l); 

} 
public void mouseClicked(MouseEvent e) 
{ 
    String clickDesc; 
    if (e.getClickCount() == 2) 
     clickDesc = "double"; 
    else 
     clickDesc = "single"; 

    System.out.println("Mouse was " + clickDesc + "-clicked at location (" + 
     e.getX() + ", " + e.getY() + ")"); 

     int mouseX = e.getX(); 
     int mouseY = e.getY(); 

    if(mouseX >= x && mouseX <= x+w && mouseY >= y && mouseY <= y+l) 
    { 

    } 
    else 
    { 

    } 
     this.repaint(); 
} 

public void mouseDragged(MouseEvent e) 
{ 
    System.out.println("mouse is being dragged at location (" + e.getX() + ", " +  e.getY() + ")"); 
    MouseMotion ="mouseDragged"; 
    repaint(); 
} 
public void mouseMoved(MouseEvent e) 
{ 
    System.out.println("mouse is being moved at location (" + e.getX() + ", " + e.getY() + ")"); 
    MouseMotion ="mouseMoved"; 
    repaint(); 
} 


public void mouseEntered(MouseEvent e) {} 
public void mouseExited(MouseEvent e) {} 
public void mousePressed(MouseEvent e) {} 
public void mouseReleased(MouseEvent e) {} 
} 
+0

你想要什麼時候移動矩形,以及你想將它移動到哪裏? 不確定你爲什麼要釘,你已經創建了一個程序,繪製一個矩形與指定的x和y。您還可以聽到鼠標移動和鼠標點擊,並在鼠標移動或單擊時記錄鼠標的x和y位置。該程序甚至準備重新繪製,如果您更改框的x或y。 你自己沒有寫過這個程序嗎?哪一部分是你不明白的? –

回答

5

新的答案 如果你希望能夠單擊並拖動矩形,你基本上只是更新的矩形的x和y,有一個鼠標監聽改變這些值到鼠標當前位置上點擊。

老回答

你的問題是有點混亂。您提到使用 mouseClicked(MouseEvent e),但它與 實際上沒有任何關係,實際上正在移動處理單擊鼠標 的事件的矩形。

如果你只是想移動你的矩形你可以有一個變量和 添加到x或y。例如:

int x = 100; 
int y = 100;  
g.fillRect(x,y,100,100); 

然後在你的公共無效來看,你可以這樣做:

 try 
     { 
     Thread.sleep(100); 
     }catch(Exception e) 
     { 
     } 
     x = x + 2; 
     y = y +2; 
     repaint(); 

或爲,如果在單擊鼠標基本上你會使用鼠標 事件,當它被點擊,你會只需將x和y設置爲 鼠標的位置即可。

+0

他希望能夠拖動鼠標,讓廣場移動它,你從哪裏得到三角形... –

+0

Ooops出於某種原因輸入三角形我的意思是矩形。我將編輯我的消息。 – ComputerLocus

+0

感謝非常有幫助 –

1

您需要將鼠標偵聽器添加到要偵聽的對象。看看http://docs.oracle.com/javase/tutorial/uiswing/events/mouselistener.html它會讓你開始如何設置鼠標監聽器。
另外,你實際上卡在哪裏?讓聆聽者工作?或者讓矩形移動?

+0

我被困在獲得矩形移動 –

+0

你想能夠拖動它嗎?或者只需點擊並讓它移動? –

+0

能夠拖動它 –

1

如果你想能夠'畫'矩形這snipet很好地工作。

public int XVal = 0 , YVal = 0; 

public void paint(Graphics g) { 

    g.fillRect(XVal, YVal, 20, 20); 

    addMouseMotionListener(
      new MouseMotionAdapter() { 

       public void mouseDragged(MouseEvent e) { 

        XVal = e.getX(); 
        YVal = e.getY(); 
        repaint(); 
       } 
      }); 
} 
1

爲了擁有它順序移動,你需要獲得的相對位置,這始終是 currentPosition - 一位置。您可以使用mouseMove存儲當前位置。

public void mouseMoved(MouseEvent e) 
{ 
    _relativePosition.x = e.getX() - _currentPosition.x; 
    _relativePosition.y = e.getX() - _currentPosition.y; 
    _currentPosition.x = e.getX(); 
    _currentPosition.y = e.getY(); 
} 
1

你只需要以增加其在蜱方法X或Y變量();