如何在一个监听器中识别鼠标拖动和鼠标按下事件?

3

在下面的代码中,mouseDragged未被识别。我做错了什么?

addMouseListener(new MouseInputAdapter() {

  @Override
  public void mouseDragged(MouseEvent e) { ... }
  @Override
  public void mousePressed(MouseEvent e) { ... }

});
3个回答

7
MouseInputAdapter mia = new MouseInputAdapter() {
  @Override
  public void mouseDragged(MouseEvent e) { ... }
  @Override
  public void mousePressed(MouseEvent e) { ... }
};
addMouseListener(mia);
addMouseMotionListener(mia); // <-- You're missing this one.

4
因为你在 addMouseListener 内实现了 mouseDragged,所以它未被识别。 mouseDragged 是由 MouseMotionListener 触发的,而 mousePressed 是由 MouseListener 触发的。
因此,你需要同时实现 MouseListenerMouseMotionListener,并相应地添加正确的监听器。
public class MyClass extends JPanel implements MouseListener,
                                               MouseMotionListener {

  public MyClass() {
    // whatever code you need, then add the listeners
    this.addMouseListener(this); 
    this.addMouseMotionListener(this);
   }

  public void mousePressed(MouseEvent e) { ... }
  public void mouseDragged(MouseEvent e) { ... }

}

0
不要使用 addMouseListener,而要使用 addMouseMotionListener:
addMouseMotionListener(new MouseMotionListener() {

        @Override
        public void mouseMoved(MouseEvent e) {
            // TODO Auto-generated method stub

        }

        @Override
        public void mouseDragged(MouseEvent e) {
            // TODO Auto-generated method stub

        }
    });

:D


我在来这里询问之前尝试过这个,但它不起作用,正如Anthony Forloney所提到的那样。 - kovike

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接