Swing的MouseDrag(),MouseMoved()没有被调用问题

来源:互联网 发布:数据线上带充电宝 编辑:程序博客网 时间:2024/05/22 02:55

MouseDrag()与MouseMoved()没有被调用是因为添加的监听器有问题

下面就这个问题进行说明:

这里监听器为MouseAdpter的子类

使用addMouseMotionListener()时

MouseAdpter.MouseDraged()与MouseAdpter.MouseMoved()会被调用。

移动时-------------调用MouseMoved()

按住鼠标左键+移动-------调用MouseDraged()

下面全面说明一下MouseAdpter各个方法。

当使用addMouseListener()方法添加MouseAdpter时有效

mouseClicked(MouseEvent e) 
mouseEntered(MouseEvent e) --------当鼠标进入(添加了监听器的)组件时调用,包括子组件
mouseExited(MouseEvent e) ----------当鼠标离开(添加了监听器的)组件时调用,包括子组件
mousePressed(MouseEvent e) 
mouseReleased(MouseEvent e) 

当使用addMouseMotionListener()方法添加MouseAdapter时有效
mouseDragged(MouseEvent e) 
mouseMoved(MouseEvent e) 

当使用addMouseWheelListener()方法添加MouseAdapter时有效(针对鼠标滑轮)
mouseWheelMoved(MouseWheelEvent e)

--------------------------------------------------------

MouseEvent的有用方法:

getX(),getY()----------------获取鼠标当前的位置

getModifies()--------------获取鼠标的左键或键盘点击

getClickCount()-----------获取鼠标点击的次数

getSource()---------------获取产生事件的事件源返回Object。

以下是测试代码:

class DnDAdapter extends MouseAdapter{@Overridepublic void mouseWheelMoved(MouseWheelEvent e) {// TODO Auto-generated method stubsuper.mouseWheelMoved(e);}@Overridepublic void mouseClicked(MouseEvent e) {// TODO Auto-generated method stubSystem.out.print("Clicked:");System.out.println("("+e.getX()+","+e.getY()+")");super.mouseClicked(e);}@Overridepublic void mouseEntered(MouseEvent e) {// TODO Auto-generated method stubSystem.out.print("Entered:");System.out.println("("+e.getX()+","+e.getY()+")");super.mouseEntered(e);}@Overridepublic void mouseExited(MouseEvent e) {// TODO Auto-generated method stubSystem.out.print("Exited:");System.out.println("("+e.getX()+","+e.getY()+")");super.mouseExited(e);}@Overridepublic void mousePressed(MouseEvent e) {// TODO Auto-generated method stubSystem.out.print("Pressed:");System.out.println("("+e.getX()+","+e.getY()+")");super.mousePressed(e);}@Overridepublic void mouseReleased(MouseEvent e) {System.out.print("Released:");System.out.println("("+e.getX()+","+e.getY()+")");super.mouseReleased(e);}public void mouseDragged(MouseEvent e) {System.out.println("("+e.getX()+","+e.getY()+")");super.mouseDragged(e);}@Overridepublic void mouseMoved(MouseEvent e) {// TODO Auto-generated method stub//System.out.println("("+e.getX()+","+e.getY()+")");super.mouseMoved(e);}}