Java * ActionListener与MouseListener的执行顺序说明
作者:Starzkg 发布时间:2022-02-04 20:08:23
基本概念
* (Listener)
: * 用于监听web应用中某些对象、信息的创建、销毁、增加,修改,删除等动作的发生,然后作出相应的响应处理。当范围对象的状态发生变化的时候,服务器自动调用 * 对象中的方法。常用于统计在线人数和在线用户,系统加载时进行信息初始化,统计网站的访问量等等。ActionListener
:ActionListener用于接收操作事件的 * 接口。对处理操作事件感兴趣的类可以实现此接口,而使用该类创建的对象可使用组件的 addActionListener 方法向该组件注册。在发生操作事件时,调用该对象的 actionPerformed 方法。MouseListener
:处理鼠标事件的类要么实现此接口(及其包含的所有方法),要么扩展抽象类 MouseAdapter(仅重写所需的方法)。 然后使用组件的 addMouseListener 方法将从该类所创建的 * 对象向该组件注册。当按下、释放或单击(按下并释放)鼠标时会生成鼠标事件。鼠标光标进入或离开组件时也会生成鼠标事件。发生鼠标事件时,将调用该 * 对象中的相应方法,并将 MouseEvent 传递给该方法。MouseAdapter
:用于接收鼠标事件的抽象适配器类。 这个类中的方法是空的。 此类作为创建 * 对象的方便而存在。
开发环境
JAVA 1.8
Eclipse 201803
源代码
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class GUIDEMO {
public static void main(String[] args) {
// TODO 自动生成的方法存根
EventQueue.invokeLater(() ->
{
JFrame frame = new MyFrame();
frame.setTitle("DrawTest");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
});
System.out.println("Hello World");
}
public void print(Object obj) {
System.out.println(obj);
}
}
class MyFrame extends JFrame {
private static final int DEFAULT_WIDTH = 400;
private static final int DEFAULT_HEIGHT = 400;
public MyFrame() {
setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT);
setLocation(100,200);
setLayout(new FlowLayout());
JButton but=new JButton("DEMOButton");
but.addActionListener(event-> {
print("action");
});
but.addMouseListener(new MouseAdapter(){
public void mouseEntered(MouseEvent e) {
print("enter");
}
public void mouseExited(MouseEvent e) {
print("exit");
}
public void mouseClicked(MouseEvent e) {
print("click");
}
});
add(but);
}
public void print(Object obj) {
System.out.println(obj);
}
public Dimension getPreferredSize() { return new Dimension(DEFAULT_WIDTH, DEFAULT_HEIGHT); }
}
运行结果
小结一下
ActionListener先于MouseListener执行
注:某教学视频中在JAVA 1.6环境下ActionListener后于MouseListener执行。
鼠标 * 和动作 * 区别和联系
1.英文名:MouseListener和ActionListener
同为接口,继承同一个父类EventListenr
用时需定义类实现接口
2.作用
MouseListener
:可用于鼠标的单击、按下、释放、进入、离开,可以用于界面、组件类ActionListener
:用于组件上面(JPanel不可以,JFrame也不可以,JLabel也不可以)JButton可以,JTextField也可以
3.区别
MouseListener
在功能上更加多样化,在加的对象上也更有选择性更广泛;ActionListener
在功能上相对单一,只能适用于几种简单的组件上且都为单击事件。ActiMouseListener
有e.getActionCommand()方法,而ActionListener没有,所以不能判断
究竟按下或者释放的是哪个按钮,所以按钮多的话,不能用MouseListener。
//MouseListener部分:
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
g.setColor(Color.blue);
draw(100,400,400,400,400,100,10);
draw(400,100,400,400,700,400,10);
draw(700,400,400,400,400,700,10);
draw(400,700,400,400,100,400,10);
}
//同样的功能ActionListener部分:
if(e.getActionCommand().equals("谢宾斯基三角形")){
g.setColor(Color.blue);
draw(100,400,400,400,400,100,10);
draw(400,100,400,400,700,400,10);
draw(700,400,400,400,400,700,10);
draw(400,700,400,400,100,400,10);
}
来源:https://shentuzhigang.blog.csdn.net/article/details/103109671


猜你喜欢
- 本文讲述绘制Android自定义各种图形效果,为自定义控件的入门篇 相关视频链接: Android自定义控件系列 http://edu.cs
- 废话不多说,直接上代码String longUrl = "https://open.weixin.qq.com/connect/o
- 目录1、synchronized锁的底层实现原理2、基于synchronized实现单例模式3、利用类加载实现单例模式(饿汉模式)1、syn
- 本项目是前端vue3,后端springboot开发 需求为:前端导入表格,后端处理表格存储数据,点击按钮可以导出表格。上传效果:前端点击上传
- 参考ColorComboBox做修改,并对颜色名做些修正,用于CR MVMixer产品中,聊作备忘~效果图:代码://颜色拾取框using
- 单元测试是编写测试代码,应该准确、快速地保证程序基本模块的正确性。JUnit是Java单元测试框架,已经在Eclipse中默认安装。JUni
- Http通信概述Http通信主要有两种方式POST方式和GET方式。前者通过Http消息实体发送数据给服务器,安全性高,数据传输大小没有限制
- 发生服务器 500 异常,如果默认方式处理,则是将异常捕获之后跳到 Tomcat 缺省的异常页面,如下图所示。不论哪个网站都是一样的,所以为
- java中的复杂查询sql语句实现:这样的查询栏,在页面中很常见,这就是复杂查询的条件,我们可以填写一个条件或多个条件,也可以一个都不填写,
- 使用RateLimiter通过AOP方式进行限流1、引入依赖<!-- guava 限流 --><dependency>
- 1. java 位掩码java 位掩码,在java开发中很少有场景会用到掩码,但是当系统中需要判断某个对象是否有 某些权限时,可以通过位掩码
- 前言定时器线程池提供了定时执行任务的能力,即可以延迟执行,可以周期性执行。但定时器线程池也还是线程池,最底层实现还是ThreadPoolEx
- spring boot ${}占位符不起作用问题:在 pom.xml 文件里定义好属性标签,然后在 properties或者xml 中使用$
- 本文主要为大家整理Java常见的面试题,供大家参考,具体内容如下1. Java中sleep和wait的区别① 这两个方法来自不同
- Android对sdcard扩展卡文件的操作其实就是普通的文件操作,但是仍然有些地方需要注意。比如:1.加入sdcard操作权限;2.确认s
- 原因用Java调用雪球的API,结果返回的是乱码,一番研究后发现是因为返回的数据使用了GZIP压缩,需要先解压才能得到正确数据。思路使用了G
- 每次写批量的时候,都要在网上搜索一下,虽然都做过多次了,但具体的自己还是记不住(汗颜),所以索性今天就记录下来。前期说明:foreach的主
- 一、概述应用程序配置文件,对于asp.net是 web.config,对于WINFORM程序是 App.Config(ExeName.exe
- 简介redis 多数据源主要的运用场景是在需要使用多个redis服务器或者使用多个redis库,本文采用的是fastdep依赖集成框架,快速
- 如果我们在Intellij Idea中开发好程序,需要部署到远程SSH服务器运行,我们可以使用某些SSH软件的rz功能,也可以使用专用的FT