java 中鼠标事件_Java中的鼠标事件

java 中鼠标事件_Java中的鼠标事件任何组件上都可以发生鼠标事件 如 鼠标进进组件 退出组件 在组件上方单击鼠标 拖动鼠标等都发生鼠标事件 也就是说 组件可以成为发生鼠标事件的事件源 1 使用 MouseListene 接口处理鼠标事件使用 MouseListene 接口可以处理 5 种操纵发生的鼠标事件 1 在事件源上按下鼠标键 mousePressed MouseEvent 2 在事件源上开释鼠标键 mouseRelease M

任何组件上都可以发生鼠标事件,如:鼠标进进组件、退出组件、在组件上方单击鼠标、拖动鼠标等都发生鼠标事件,也就是说,组件可以成为发生鼠标事件的事件源。

1 使用MouseListener接口处理鼠标事件

使用MouseListener接口可以处理5种操纵发生的鼠标事件:

(1)在事件源上按下鼠标键。mousePressed(MouseEvent )

(2)在事件源上开释鼠标键。mouseReleased(MouseEvent )

(3)在事件源上点击鼠标键。 mouseClicked(MouseEvent )

(4)鼠标进进事件源。 mouseEntered(MouseEvent )

(5)鼠标退失事件源。 mouseExit(MouseEvent )

鼠标事件的类型是MouseEvent,即当发生鼠标事件时,MouseEvent类自动创建一个事件对象。

MouseEvent类中有下列几个重要的方法:

(1)getX() 获取鼠标在事件源坐标系中的x坐标。

(2)getY() 获取鼠标在事件源坐标系中的y坐标。

(3)getModifiers() 获取鼠标的左键或右键。鼠标的左键和右键分别使用InputEvent类中的常量BUTTONl_MASK和BUTTON3_MASK来表示

(4)getClickCount() 获取鼠标被单击的次数。

(5)getSource() 获取发生鼠标事件的事件源。

事件源获得监视器的方法是addMouseListener(监视器)。

MouseListener接口中有如下方法:

(1)mousePressed(MouseEvent) 负责处理鼠标按下事件。即,当你在事件源按下鼠标时,监视器发现这个事件后将自动调用接口中的这个方法对事件作出处理。

(2)mouseReleased(MouseEvent) 负责处理鼠标开释事件。即,当你在事件源开释鼠标时,监视器发现这个事件后将自动调用接口中的这个方法对事件作出处理。

(3)mouseEntered(MouseEvent) 负责处理鼠标进进事件源事件。即,当鼠标进进时,监视器发现这个事件后将自动调用接口中的这个方法对事件作出处理。

(4)mouseExited(MouseEvent) 负责处理鼠标离开事件。即,当鼠标离开容器时,监视器发现这个事件后将自动调用接口中的这个方法对事件作出处理。

(5)mouseClicked(MouseEvent) 负责处理点击鼠标事件。即,当鼠标被单击时,监视器发现这个事件后将自动调用接口中的这个方法对事件作出处理。

现在我们给出一个小程序mouse1.java,在这个小程序中有一个文本框,它负责记录鼠标事件。当鼠标进进小程序时,文本区显示甲鼠标进来了”;当鼠标离开时,文本区显示“鼠标走开了”;当鼠标被按下时,文本区显示“鼠标按下了”,并显示鼠标的坐标。

在下面例子mouse2.java中,当在画布上按下鼠标左键时,在鼠标位置处绘制一个圆;当按下鼠标右键时,在鼠标位置处绘制一个矩形:当鼠标退出画布时,清除绘制的全部图形。

下面的例子mouse3.java分别监视按钮、文本框和容器上的鼠标事件,当发生鼠标事件时,获取鼠标的坐标值,留意,事件源的坐标系的左上角是坐标源点

2 使用MouseMotionListener接口处理鼠标事件

使用MouseMotionListener接口可以处理两种操纵发生的鼠标事件:

(1)在事件源上拖动鼠标。

(2)在事件源上移动鼠标。

鼠标事件的类型是MouseEvent,即当发生鼠标事件时,MouseEvent类自动创建一个事件对象。 事件源获得监视器的方法是addMouseMotionListener(监视器)。

MouseMotionListener接口中有如下方法:

(1)mouseDragged(MouseEvent) 负责处理鼠标拖动事件。即,当你在事件源拖动鼠标时,监视器发现这个事件后将自动调用接口中的这个方法对事件作出处理。

(2)mouseMoved(MouseEvent) 负责处理鼠标移动事件。即,当你在事件源移动鼠标时,监视器发现这个事件后将自动调用接口中的这个方法对事件作出处理。

在这里我们也提供一个非常简单的用鼠标作画的小程序mouse4.java。我们的想法很简单,只要我们能用鼠标画点,那么就可以用鼠标自由作画了。我们已经会用drawLine(int x1,int yl,int x2,int y2)画从点(x1,y1)到点(x2,y2)的直线,那么当直线的出发点和终点相同时,就画出了一个点。

现在让我们来分析一下例子4的代码。当我们拖动鼠标时(按着鼠标左键),我们就获得了鼠标拖动时的坐标,同时调用repaint()方法画下这个坐标点。我们已经知道,在小程序中调用repaint方法时,程序首先清除paint()方法以前所画的内容,然后再调用paint()方法。但有时我们不想让程序清除paint()方法以前所画的所有内容。实际上当我们调用

repaint()方法时,程序自动地调用update(Graphics g)方法(从父类Component继续下来的)清除paint()方法以前所画的内容,然后再调用paint方法。因此我们可以在我们的小程序中重写这个update(Graphics g)方法(即隐躲父类的方法),根据需要来清除哪些部分或保存哪些部分。在这个例子中,我们在updatte(Graphics g)方法体内没有清除以前所画的内容(假如预备清除可使用clearrect方法,见17.4节)而是继续调用paint方法。受上面例子的启发,你可能已经想到,我们可以通过画实心圆来改变线条的粗细。下面是一个略微复杂的例子mouse5.java。在这个例子中我们可以控制线条的颜色,而且我们还可以使用橡皮擦掉所画的图形。稍加改进就可以控制线条的粗细,另外还可以使用上一节先容的方法控制鼠标的外形。

3 鼠标事件的转移

假如我们正监视一个容器上的鼠标事件,而容器中添加了一些组件,则当在组件上进行单击鼠标、移动鼠标等操纵时,容器将不知道这些操纵的发生。

可以使用鼠标事件的转移将一个事件源发生的鼠标事件转移到另一个事件源上,也就是说,当用户的在某个事件源上单击鼠标时,可以通过鼠标事件的转移导致另一个事件源上发生鼠标事件(声东击西)。使用javax.swing包中的SwingUtilities类的静态方法:

MouseEvent convertMouseEvent(Component source,MouseEvent sourceEvent,Component destination)

可以将source组件上发生的鼠标事件转移到组件destination,该方法返回转移后的鼠标事件。 在下面的例子mouse6.java中,用户单击一个按钮,然后拖动鼠标移动按钮的位置,观察鼠标事件的转移。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/224166.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午12:34
下一篇 2026年3月17日 下午12:34


相关推荐

  • Linux内核版本介绍与查询

    Linux内核版本介绍与查询文章目录 Linux 内核 Linuxkernel 简介 Linux 内核版本号 1 在 CentOS 下如 2 在 Ubuntu 下如 3 在 ARMCortex A7 内核的嵌入式 Linux 开发板下内核版本分类查看 Linux 内核版本命令查看 Linux 系统版本的命令本文作者 Jasonhu 本文链接 http jasonhzy github io 2019 02 05 linux kernel version Linux 内核 Linuxkernel 简介 Linux 内核版本命名在不同时期有着不同的规范

    2026年3月18日
    2
  • 如何评价OpenClaw这款AI智能体框架?它真的能让AI从对话走向执行吗?

    如何评价OpenClaw这款AI智能体框架?它真的能让AI从对话走向执行吗?

    2026年3月16日
    3
  • StringUtils工具类常用方法「建议收藏」

    StringUtils工具类常用方法「建议收藏」StringUtils类在操作字符串是安全的,不会报空指针异常,也正因此,在操作字符串时使用StringUtils相比使用原生的String会更加安全。一、判空StringUtils提供常用的判断空字符串有两个方法:isEmpty和isBlank,这两者的有何区别呢,直接看源码://isEmptypublicstaticbooleanisEmpty(Stringstr)…

    2022年6月11日
    38
  • 面试题之一:堆栈区别

    面试题之一:堆栈区别一 堆栈简介栈是编译器自动申请与分配 程序员无法进行控制的顺序线性结构 在程序结束时 由系统进行回收 堆是一种需要程序员手动申请的链表结构 申请的内存空间需要程序员手动释放 程序员不释放时系统可能回收

    2026年3月16日
    2
  • SQL中连接(JOIN)子句介绍

    SQL中连接(JOIN)子句介绍本文主要介绍 SQL StructuredQu 中连接 JOIN 子句的相关知识 同时通过用法示例介绍连接的常见用法 说明 本文的用法示例是面向 MySQL 数据库的 1 概述 SQL 中 JOIN 子句用于把来自两个或多个表的行结合起来 在实际的数据库应用中 经常需要从多个数据表中读取数据 这时就可以使用 SQL 语句中的连接 JOIN 子句 在两个或多个数据表中查询数据 JOIN 的用法按照功能划分 可分为如下三类 INNERJOIN 内连接 或等值连接

    2026年3月19日
    2
  • android studio安装教程(持续更新中,包安装成功,不成功你找我)

    android studio安装教程(持续更新中,包安装成功,不成功你找我)百度搜索 Androidstudi 或者直接输入 http www android studio org 进入这个页面根据这个下载相应的安装包或者压缩包 这里演示安装 64 位的 androidstudi 下载完成后直接双击安装包 就会出来下面这个界面点击 Next 点击 Next 点击 Next 点击 i

    2026年3月26日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号