使用MouseAdapter时为什么没有收到mouseDragged-events?

Tim*_*Tim 12 java mouseevent

为什么mouseDragged只在使用MouseMotionAdapter
时收到-events 而不是在使用时收到MouseAdapter

Java有两个用于接收鼠标事件的抽象适配器类;
MouseAdapterMouseMotionAdapter.

这两个类有mouseDragged(MouseEvent e)-方法,但
一个在MouseAdapter似乎不工作; mouseDragged- 事件
永远不会通过这个.

这两个类都实现了MouseMotionListener其γ-接口
定义了mouseDragged-event,所以我不明白为什么它
不能在他们两人的正常工作.

以下是显示此问题的示例代码:

import java.awt.event.MouseAdapter;  
import java.awt.event.MouseEvent;  
import java.awt.event.MouseMotionAdapter;  
import javax.swing.JFrame;  

public class SwingApp extends JFrame
{
    public SwingApp()
    {   
        // No mouseDragged-event is received when using this : 
    this.addMouseListener(new mouseEventHandler()); 

    // This works correct (when uncommented, of course) :
    // this.addMouseMotionListener(new mouseMovedEventHandler());


    setBounds(400,200, 550,300);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setResizable(false);
    setVisible(true);
    }   

  public static void main(String args[])
  {
    new SwingApp();
  }

  class mouseEventHandler extends MouseAdapter
  {         
    @Override
    public void mouseDragged(MouseEvent e) // Why is this method never called ?
    {
        System.out.println(String.format("MouseDragged via MouseAdapter / X,Y : %s,%s ", e.getX(), e.getY()));
    }
  } 

  class mouseMovedEventHandler extends MouseMotionAdapter
  {           
    @Override
    public void mouseDragged(MouseEvent e)
    {
        System.out.println(String.format("MouseDragged via MouseMotionAdapter / X,Y : %s,%s ", e.getX(), e.getY()));
    }
  } 

}
Run Code Online (Sandbox Code Playgroud)

aio*_*obe 23

如果你添加它

this.addMouseListener(new mouseEventHandler()); 
Run Code Online (Sandbox Code Playgroud)

你不会收到相关的动议MouseEvents(那不是你注册听众的!)

您必须添加两次侦听器,即使用以下addMouseMotionListener方法添加它:

mouseEventHandler handler = new mouseEventHandler();
this.addMouseListener(handler); 
this.addMouseMotionListener(handler);
Run Code Online (Sandbox Code Playgroud)

为了获得这两种类型的事件.

(一个侧节点,总是使用大写第一个字母为您的类,即,MouseEventHandler改为使用:-)


ilu*_*uxa 5

您必须将 MouseAdapter 添加为 mouseListener 和 mouseMotionListener,这样您就很成功了。MouseAdapter 实现了 MouseListener 和 MouseMotionListener,但是您的组件不知道将 mouseDragged 事件传递给它,除非您调用 addMouseMotionListener