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在这里的想法。做为优秀的软件,代码就不应该多余的。
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在这里的想法。做为优秀的软件,代码就不应该多余的。
但问题是,你去实现MouseAdapter的时候。
自定义了MouseDragged()这个方法。
但就是不触发,为什么。为什么?
继承抽象类与实现接口相比,优点就是不用实现接口中的每个方法,只实现自己要用的就行。
但同时也带来了隐患,就是如果你的方法签名没有覆盖抽象类中的方法,也不会报错。
加上@Override看看。
另外,检查你的代码中注册监听器是否正确。别动不动就怨这个怨那个。sun这么做自然有他的道理。
addMouseMotionListener
与
addMouseListener
监听作用不一样吗?再一个问题:
如果MouseAdapter解决不了 MouseDragged 问题,又何必去实现 MouseMotionLisner这个接口呢
addMouseMotionListener仅关心鼠标移动事件。
addMouseListener关心所有的鼠标事件。Adapter什么问题也解决不了,MouseAdapter也不例外。它的作用是让你在添加监听器的时候不用实现自己并不关心的方法。
如果没有它的话,你每实现一个接口,无论有多少个你不感兴趣的方法,你都必须实现。否则无法编译。
另外,在jdk1.6中,MouseAdapter实现了更多的接口,你可用一个类继承MouseAdapter,然后将所有的鼠标事件的处理都写在里面。
鼠标事件 MouseListener
按下鼠标按键
释放鼠标按键
单击鼠标按键(按下并释放)
鼠标光标进入组件几何形状的未遮掩部分
鼠标光标离开组件几何形状的未遮掩部分
鼠标移动事件 MouseMotionListener
移动鼠标
拖动鼠标
以上统一到 MouseInputListener
还有MouseWheelListener对应的MouseWheelEvent滚轮滚动
addMouseListener关心所有的鼠标事件。
这句我说错了。但并不影响后面的意思。
如果要监听鼠标移动和拖拽事件的话,必须用addMouseMotionListener。
但参数可以是MouseAdapter。
但也可以是MouseMotionAdapter.
这句错了。参数两者皆可,但是方法必须用addMouseMotionListener。
有它还要有MouseMotionAdapter吗?