public abstract class MouseAdapter implements MouseListener, MouseWheelListener, MouseMotionListener {
    public void mouseClicked(MouseEvent e) {}
    public void mousePressed(MouseEvent e) {}
    public void mouseReleased(MouseEvent e) {}
    public void mouseEntered(MouseEvent e) {}
    public void mouseExited(MouseEvent e) {}
    public void mouseWheelMoved(MouseWheelEvent e){}
    public void mouseDragged(MouseEvent e){}
    public void mouseMoved(MouseEvent e){}
}
这里明显已经实现了MouseMotionListener,那么就可以使用draged和Moved两个方法。事实上不可以。
居然还有一个抽象类叫做:MouseMotionAdapter。
它仅实现了MouseMotionListener的方法,那有必要还要定义这个抽象类吗?
非常不解SUN在这里的想法。做为优秀的软件,代码就不应该多余的。

解决方案 »

  1.   

    大哥,我当然知道空实现了,
    但问题是,你去实现MouseAdapter的时候。
    自定义了MouseDragged()这个方法。
    但就是不触发,为什么。为什么?
      

  2.   

    你定义的对么?
    继承抽象类与实现接口相比,优点就是不用实现接口中的每个方法,只实现自己要用的就行。
    但同时也带来了隐患,就是如果你的方法签名没有覆盖抽象类中的方法,也不会报错。
    加上@Override看看。
    另外,检查你的代码中注册监听器是否正确。别动不动就怨这个怨那个。sun这么做自然有他的道理。
      

  3.   

    注册监听器:
    addMouseMotionListener

    addMouseListener
    监听作用不一样吗?再一个问题:
    如果MouseAdapter解决不了 MouseDragged 问题,又何必去实现 MouseMotionLisner这个接口呢
      

  4.   

    使用addMouseMotionListener(...)才会处理dragged,move这个也不是适配器模式
      

  5.   

    当然不一样。
    addMouseMotionListener仅关心鼠标移动事件。
    addMouseListener关心所有的鼠标事件。Adapter什么问题也解决不了,MouseAdapter也不例外。它的作用是让你在添加监听器的时候不用实现自己并不关心的方法。
    如果没有它的话,你每实现一个接口,无论有多少个你不感兴趣的方法,你都必须实现。否则无法编译。
    另外,在jdk1.6中,MouseAdapter实现了更多的接口,你可用一个类继承MouseAdapter,然后将所有的鼠标事件的处理都写在里面。
      

  6.   

    错误。
    鼠标事件 MouseListener
    按下鼠标按键 
    释放鼠标按键 
    单击鼠标按键(按下并释放) 
    鼠标光标进入组件几何形状的未遮掩部分 
    鼠标光标离开组件几何形状的未遮掩部分 
    鼠标移动事件 MouseMotionListener
    移动鼠标 
    拖动鼠标 
    以上统一到 MouseInputListener
    还有MouseWheelListener对应的MouseWheelEvent滚轮滚动
      

  7.   

    是的。
    addMouseListener关心所有的鼠标事件。
    这句我说错了。但并不影响后面的意思。
    如果要监听鼠标移动和拖拽事件的话,必须用addMouseMotionListener。
    但参数可以是MouseAdapter。
      

  8.   

    到底是谁错了。参数可以是MouseAdapter
    但也可以是MouseMotionAdapter.
      

  9.   

    addMouseListener关心所有的鼠标事件。 
    这句错了。参数两者皆可,但是方法必须用addMouseMotionListener。
      

  10.   

    MouseAdapter 几乎实现了所有的鼠标动作。
    有它还要有MouseMotionAdapter吗?