Java监听器ActionListener与MouseListener的执行顺序说明
程序员文章站
2024-01-08 16:49:10
目录基本概念开发环境源代码运行结果小结一下鼠标监听器和动作监听器区别和联系1.英文名:mouselistener和actionlistener2.作用3.区别基本概念 监听器(listener)...
基本概念
-
监听器(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); }
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。