我正在做這些iTunes Stanford課程,並且我一直在學習Java的開始。事情進展順利,但他們最近引入了事件 - 特別是MouseEvents。我一直在閱讀本書中的章節,並通過示例代碼,而有些東西只是沒有爲我點擊右鍵......總是會有異步的東西給我帶來麻煩:-D難以理解Java MouseEvent
此前,有些人提到我提到「addMouseListener」是Graphics導入中的類是很重要的。據我所知,這只是在畫布上添加一個全屏鼠標監聽器。
我對這件事還是很新的,所以我可能不會像我應該那樣描述事物。
這是我爲了更好地理解它而試圖簡化的一段代碼。目前,它會建立一個紅色的矩形,我可以點擊它並沿x軸拖動它。大!!!
import java.awt.*;
import java.awt.event.*;
import acm.graphics.*;
import acm.program.*;
/** This class displays a mouse-draggable rectangle and oval */
public class DragObject extends GraphicsProgram {
/* Build a rectangle */
public void run() {
GRect rect = new GRect(100, 100, 150, 100);
rect.setFilled(true);
rect.setColor(Color.RED);
add(rect);
addMouseListeners();
}
/** Called on mouse press to record the coordinates of the click */
public void mousePressed(MouseEvent e) {
lastX = e.getX();
lastY = e.getY();
gobj = getElementAt(lastX, lastY);
}
/** Called on mouse drag to reposition the object */
public void mouseDragged(MouseEvent e) {
if((lastX) > 100){
gobj.move(e.getX() - lastX, 0);
lastX = e.getX();
lastY = e.getY();
}
}
/** Called on mouse click to move this object to the front */
public void mouseClicked(MouseEvent e) {
if (gobj != null) gobj.sendToFront();
}
/* Instance variables */
private GObject gobj; /* The object being dragged */
private double lastX; /* The last mouse X position */
private double lastY; /* The last mouse Y position */
}
如果我拖動鼠標線從畫布,我想矩形留在畫面內,而不是動過它(相同的行爲,如果你超越與滾動區域水平滾動條會做鼠標按鈕仍然點擊)。我怎樣才能做到這一點?
我一直在試圖沿着這些線路的東西,但它不工作的權利:
if ((lastX > (getWidth() - PADDLE_WIDTH)) || (lastX < PADDLE_WIDTH)) {
gobj.move(0, 0);
} else {
gobj.move(e.getX() - lastX, 0);
}
感謝您的回答。我有畫布寬度。困難(對我而言)是動畫只是將對象與其過去的座標相關聯 - 而不是與畫布相關。 gobj.move(e.getX() - lastX,0);所以我一直在嘗試像if(lastX <0){lastX = 0}這樣的事情,但這只是在做與鼠標移動有關的時髦事情 - 而不是畫布:( – Joel 2010-03-01 04:54:49