[英]Register the MouseListener and MouseMotionListener so a JPanel properly handles mouse events
[英]Register MouseListener and MouseMotionListener simultaneously
我正在嘗試編寫一個包含mousePressed()
和mouseMoved()
的Mouse
類(實現MouseListener
和MouseMotionListener
mouseMoved()
。 我希望能夠在鼠標按下時檢測到鼠標的運動。 我可以分別檢測每個,但不能同時檢測。 例如:
import javax.swing.*;
import java.awt.event.*;
public class Test extends JPanel {
public Test() {
Mouse m = new Mouse();
addMouseListener(m);
addMouseMotionListener(m);
}
class Mouse implements MouseListener, MouseMotionListener{
public void mousePressed(MouseEvent e) {
System.out.println("Pressed");
}
public void mouseMoved(MouseEvent e) {
System.out.println("Moved");
}
public void mouseDragged(MouseEvent e) {}
public void mouseClicked(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
public void mouseReleased(MouseEvent e) {}
}
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setSize(500, 500);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setContentPane(new Test());
frame.setVisible(true);
}
}
如您所見,“ Pressed”和“ Moved”都被打印出來,但是一旦按下鼠標,在釋放鼠標之前就不會打印“ Moved”。 我將如何做到這一點呢?
void mouseDragged(MouseEvent e)
在組件上按下鼠標鍵並拖動時調用。
void mouseMoved(MouseEvent e)
當鼠標光標移至組件上但未按下任何按鈕時調用。
僅在未按下任何按鈕時才觸發mouseMoved
事件。
如您所見,“ Pressed”和“ Moved”都被打印出來,但是一旦按下鼠標,在釋放鼠標之前就不會打印“ Moved”。
當按下鼠標時,您需要處理的事件是mouseDragged
事件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.