2011-07-07 34 views
0

我在JPanel中有一個小圖像。當我點擊面板時,圖像必須移動到那一點。 這是鼠標偵聽器的代碼(在構造函數):在Java中將圖像移動到點(而不是拖動)

addMouseListener(new MouseAdapter(){ 
    public void mouseClicked(MouseEvent e) { 
     if (moving) return; 
     moveImageTo(e.getX(), e.getY()); 
    } 
}); 

moveImageTo

public void moveImageTo(int x, int y) { 
    moving = true; 
    moveThread.start(); 
} 

線程的問題,因爲我有起始位置(一個java.awt.Point)和(另一個java.awt.Point),但我不知道如何計算方向和移動的步驟。我也認爲線程必須在每一步調用paint(Graphics g)方法。任何人有任何提示或鏈接?

+0

你想動畫_從開始點到點擊點的移動? – trashgod

回答

2

我猜你不希望根據你的問題在一個步驟中移動圖像,而是你想在幾個毫秒內進行「平滑」移動 - 因此圖像顯示它滑入位置而不是移動在一個新的位置去? 在這種情況下,您需要確定此舉需要多長時間 - 例如, 500毫秒以及你將要做多少步 - 例如40步。 具有起始座標(叫他們startXstartY)和終點座標(endXendY),那麼可以很容易地計算每一步的運動(這個代碼將在您的Runnable類發生,這將在線程中運行):

... 
private static final int STEPS = 40; 
private static final long INTERVAL = 500;//msec 
private static final long STEP_INTERVAL = INTERVAL/STEPS; 
... 
private int stepX, stepY; 
... 
public void computeMovement() { 
stepX = (endX - startX)/STEPS; 
stepY = (endY - startY)/STEPS; 
} 
... 
public void run() { 
int currX = startX; 
int currY = startY; 
computeMovement(); 
for(int i = 0; i < STEPS; i++) { 
    currX += stepX; 
    currY += stepY; 
    //move image to (currX, currY) 
    TimeUnit.MILISECONDS.sleep(STEP_INTERVAL); 
} 
} 

以上是一個非常粗糙和準備好的示例,但它旨在向您展示如何在單獨的線程內逐步移動圖像。

+0

謝謝,這正是我期待的! – Alberto

-1

進入run()添加一種方法來移動圖像一堆像素每刷新,直到你達到e.getX()e.getY()。嘗試一下找到一個不錯的px/s組合