JavaSwing | MouseEvent 鼠标事件

目录 | contents

![在这里插入图片描述](https://img-blog.csdnimg.cn/20200107183555482.png?x-oss-process=image/watermark,type_ZmFuZ

一、相关接口

与鼠标相关的顶层接口有两个:MouseListenerMouseMotionListener

//MouseListener接口内的方法:
public void mousePressed (MouseEvent event )
public void mouseClicked (MouseEvent event )
public void mouseReleased (MouseEvent event )
public void mouseEntered (MouseEvent event )
public void mouseExited (MouseEvent event )

方法参数MouseEvent中封装了鼠标事件的相关信息(比如鼠标点击的x和y的坐标),其基类InputEvent中定义了一 些方法与常量。

//MouseMotionListener接口内的方法: 
public void mouseDragged( MouseEvent event ) 
public void mouseMoved( MouseEvent event )

其子接口MouseInputListener“组合”了这两个接口的所有方法,另还有一个MouseWheelListener接口与鼠标中的滚轮滚动相关。

二、设置鼠标动态响应

以实时检测鼠标行为(显示在左下角)的程序为例


1、写出一个鼠标监听器类

该类需要接上MouseListener接口和MouseMotionListener接口,并且全部重写MouseListener接口内的5个方法MouseMotionListener接口内的2个方法(上面已经列出)。每一个方法对应当鼠标发生该事件时对应的响应,比如:

public void mouseMoved(MouseEvent event) {
   //当鼠标移动时会运行此处代码
}

注意是总共7个方法去拿不重写,所以对于不需要的鼠标响应,也需要重写(或者考虑使用鼠标事件适配器),把代码内容空着就好。

public void mouseDragged(MouseEvent event) {
    //当鼠标拖动时会运行此处代码
}

例:

private class MouseHandler implements MouseListener, MouseMotionListener {
    // MouseListener event 响应
    // handle event when mouse released immediately after press
    public void mouseClicked(MouseEvent event) {
        statusBar.setText(String.format("Clicked at [%d, %d]",
                event.getX(), event.getY()));
    }

    // handle event when mouse pressed
    public void mousePressed(MouseEvent event) {
        statusBar.setText(String.format("Pressed at [%d, %d]",
                event.getX(), event.getY()));
    }

    // handle event when mouse released
    public void mouseReleased(MouseEvent event) {
        statusBar.setText(String.format("Released at [%d, %d]",
                event.getX(), event.getY()));
    }

    // handle event when mouse enters area
    public void mouseEntered(MouseEvent event) {
        statusBar.setText(String.format("Mouse entered at [%d, %d]",
                event.getX(), event.getY()));
        mousePanel.setBackground(Color.GREEN);
    }

    // handle event when mouse exits area
    public void mouseExited(MouseEvent event) {
        statusBar.setText("Mouse outside JPanel");
        mousePanel.setBackground(Color.WHITE);
    }

    // MouseMotionListener event 响应
    // handle event when user drags mouse with button pressed
    public void mouseDragged(MouseEvent event) {
        statusBar.setText(String.format("Dragged at [%d, %d]",
                event.getX(), event.getY()));
    }

    // handle event when user moves mouse
    public void mouseMoved(MouseEvent event) {
        statusBar.setText(String.format("Moved at [%d, %d]",
                event.getX(), event.getY()));
    }
}
2、创建此鼠标监听器类的一个对象

直接new一个刚写好的MouseHandler对象

 //实例化已经写好的鼠标事件监听器的对象
MouseHandler handler = new MouseHandler();
3、将鼠标监听器对象付托在事件源组件上

我这里是将鼠标的事件发生设定在一个mousePanel上(事件源为JPanel组件),使用 addXXListener方法 给它的两个监听器加上对应的监听器对象

mousePanel.addMouseListener(handler);  //加入监听器
mousePanel.addMouseMotionListener(handler);  //加入监听器

完整代码有点点长就不贴喇~

三、MouseEvent类的方法

上面重写的每一个方法的传入参数都是MouseEvent类的,它继承了InputEvent类,其本身和基类都封装了不少方法与常量,我们可以直接使用MouseEvent类调用完成以下实用功能:

1、检测鼠标按键

一般鼠标都有三个按键,我们分别称之左、中、右按键。
使用 isMetaDown和isAltDown方法 来检测鼠标按键是对应哪个。

public boolean isMetaDown()  //按下的是右按键,返回ture;否则返回false
public boolean isAltDown()  //按下的是中间按键,返回ture;否则返回false
2、获取鼠标的位置

使用 getX、getY或者getPoint方法

public int getX()  //获取鼠标的x坐标
public int getY()  //获取鼠标的y坐标
public Point getPoint()  // 获取鼠标位置(x, y)
3、获取鼠标连续点击次数

使用 getClickedCount方法 ,这个方法一般在检测双击、三击中很常用到。

public int getClickCount()  //返回连续点击的次数


end

欢迎关注个人公众号“ 鸡翅编程 ”,这里是认真且乖巧的码农一枚。

---- 做最乖巧的博客er,做最扎实的程序员 ----

旨在用心写好每一篇文章,平常会把笔记汇总成推送更新~

在这里插入图片描述

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值