博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java swing(awt):事件监听机制的实现原理+简单示例
阅读量:5926 次
发布时间:2019-06-19

本文共 2372 字,大约阅读时间需要 7 分钟。

(1)实现原理事件监听机制的实现:参考图:事件模型_ActionEvent
  为了节省资源,系统无法对某个事件进行实时的监听。故实现的机制是当发生某个事件后,处理代码将被自动运行,类似钩子一般。(回调函数)事件有许多,这边以按钮被按下为例。由于处理的方法函数是我们人为进行编写的,故Button是不知道所要调用的函数名是什么。对此采用的解决方法为:Button源代码调中用接口方法,而我们的监听处理函数则必须要实现该接口(ActionListener)这样利用多态,使得Button虽调用的为该接口的方法,但运行的则是我们new出来的对象方法。类似于Button提供了这么一个钩子,但是钩子上面是什么东西他自己并不清楚,我们只需要人为地往上面挂上我们需要的东西即可。事件监听机制实现过程(如下图): 当事件源对象发生了某一事件后,事件信息将被打包为ActionEvent类,并发送给事件监听器。而后事件监听器将根据其内容(包括鼠标点击的位置,动作等)做出相应的处理。(自动执行actionPerformed()函数) 而实现了特定接口的事件监听器为了对事件源对象的某一特定事件进行监测,因此必须进行注册。即告知事件源对象已被监听(b.addActionListener(m))
 

(2)事件监听示例1

import java.awt.*;import java.awt.event.*;public class TestActionEvent {    public static void main(String[] args) {    Frame f = new Frame("TestActionEent");    Button b1 = new Button("START");     Button b2 = new Button("STOP");   //创建事件源对象b2    Monitor m = new Monitor();        //创建事件监听器m    b1.addActionListener(m);      b2.addActionListener(m);         //  将事件源对象b2注册到事件监听器m中,告知b2已被m所监听    b2.setActionCommand("GAME OVER!");    f.add(b1, BorderLayout.NORTH);       f.add(b2, BorderLayout.SOUTH);   //将按钮b2添加到面板f    f.pack();                       //  根据内容确定Frame边框大小,类似外围包装上一层    f.setVisible(true);    }}class Monitor implements ActionListener {  //创建实现了事件监听接口ActionListener的事件监听器类Monitor    public void actionPerformed(ActionEvent e) {  //  事件信息被打包在了ActionEvent e中传递过来,等待处理。                                                  //actionPerformed()方法就是具体的处理事件的方法。         System.out.println("A Button has been pressed!\n" +         "the relative info is:" + e.getActionCommand());   //  ActionCommand中默认信息为该Button的名字    }}

(3)事件监听示例2

  1. /* 
  2.  * 事件监听的四步: 
  3.  * 1.要有事件源对象:button 
  4.  * 2.要发生某种事件(类):ActionEvent,封装了事件的信息 
  5.  * 3.要有监听器(接口):Monitor  接到事件后进行处理 
  6.  * 4.要把监听器注册到事件源对象上 b.addActionListener(mo); 
  7.  * 事件与监听器一一对应 
  8.  * 取决也事件源对象能添加哪种事件(注册哪种事件) 
  9.  */  
  10. import java.awt.BorderLayout;  
  11. import java.awt.Button;  
  12. import java.awt.Frame;  
  13. import java.awt.event.ActionEvent;  
  14. import java.awt.event.ActionListener;  
  15.   
  16. public class TestActionEvent {  
  17.   
  18.     public static void main(String[] args) {  
  19.         Frame f = new Frame("Test");  
  20.         Button b = new Button("Press me");  
  21.         Monitor mo = new Monitor();  
  22.         b.addActionListener(mo);  
  23.         f.add(b, BorderLayout.CENTER);  
  24.         f.pack();  
  25.         f.setVisible(true);  
  26.     }  
  27.   
  28. }  
  29.   
  30. class Monitor implements ActionListener {  
  31.   
  32.       
  33.     public void actionPerformed(ActionEvent e) {  
  34.         System.out.println("a button has been pressed");  
  35.     }  
  36.   

转载于:https://www.cnblogs.com/dengyungao/p/7524934.html

你可能感兴趣的文章
Oracle事务
查看>>
文档在线预览的实现
查看>>
jqueryui.position.js源代码分析
查看>>
一个奇妙的java坑:Long 类型的比较
查看>>
java基础---->摘要算法的介绍 (转)
查看>>
mysql中binlog_format模式与配置详解
查看>>
互联网协议入门
查看>>
iOS上文本绘制的几种方法
查看>>
利用 autoconf 和 automake 生成 Makefile 文件
查看>>
support.SerializationFailedException: Failed to deserialize payload.
查看>>
Wireshark使用注意事项
查看>>
Pig系统分析(7)-Pig有用工具类
查看>>
C 标准库 - <float.h>
查看>>
Http 请求处理流程
查看>>
Web系统开发构架再思考-前后端的完全分离
查看>>
win2008 r2下配置IIS7(ASP.net运行环境)
查看>>
ORACLE FORMS PL/SQL PACKAGE SHOW TIPS WINDOW
查看>>
docker 日志清理与设置
查看>>
c#金额转换成中文大写金额 .Net开发Windows服务
查看>>
180426
查看>>