Java swing(awt):事件监听机制的实现原理+简单示例
(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.要有事件源对象:button
- * 2.要发生某种事件(类):ActionEvent,封装了事件的信息
- * 3.要有监听器(接口):Monitor 接到事件后进行处理
- * 4.要把监听器注册到事件源对象上 b.addActionListener(mo);
- * 事件与监听器一一对应
- * 取决也事件源对象能添加哪种事件(注册哪种事件)
- */
- import java.awt.BorderLayout;
- import java.awt.Button;
- import java.awt.Frame;
- import java.awt.event.ActionEvent;
- import java.awt.event.ActionListener;
- public class TestActionEvent {
- public static void main(String[] args) {
- Frame f = new Frame("Test");
- Button b = new Button("Press me");
- Monitor mo = new Monitor();
- b.addActionListener(mo);
- f.add(b, BorderLayout.CENTER);
- f.pack();
- f.setVisible(true);
- }
- }
- class Monitor implements ActionListener {
- @Override
- public void actionPerformed(ActionEvent e) {
- System.out.println("a button has been pressed");
- }
- }
Java swing(awt):事件监听机制的实现原理+简单示例的更多相关文章
- Java中的事件监听机制
鼠标事件监听机制的三个方面: 1.事件源对象: 事件源对象就是能够产生动作的对象.在Java语言中所有的容器组件和元素组件都是事件监听中的事件源对象.Java中根据事件的动作来区分不同的事件源对象,动 ...
- java Gui编程 事件监听机制
1. GUI编程引言 以前的学习当中,我们都使用的是命令交互方式: 例如:在DOS命令行中通过javac java命令启动程序. 软件的交互的方式: 1. 命令交互方式 图书管理系统 ...
- Java 中的事件监听机制
看项目代码时遇到了好多事件监听机制相关的代码.现学习一下: java事件机制包含三个部分:事件.事件监听器.事件源. 1.事件:继承自java.util.EventObject类,开发人员自己定义. ...
- Java界面编程—事件监听机制
组件首先要先注册事件处理器,当用户单击组件.移动鼠标或者敲击键盘时都会产生事件(Event),一旦有时间发生,应用程序就会做出对该事件的响应,这些组件就是事件源(Event source). 接受.解 ...
- 4.JAVA之GUI编程事件监听机制
事件监听机制的特点: 1.事件源 2.事件 3.监听器 4.事件处理 事件源:就是awt包或者swing包中的那些图形用户界面组件.(如:按钮) 事件:每一个事件源都有自己特点有的对应事件和共性事件. ...
- JAVA之旅(三十一)——JAVA的图形化界面,GUI布局,Frame,GUI事件监听机制,Action事件,鼠标事件
JAVA之旅(三十一)--JAVA的图形化界面,GUI布局,Frame,GUI事件监听机制,Action事件,鼠标事件 有段时间没有更新JAVA了,我们今天来说一下JAVA中的图形化界面,也就是GUI ...
- java事件监听机制
1.简单的事件监听 package demo2; /* * java事件监听机制 */ import java.awt.*; import javax.swing.*; import java.awt ...
- java事件监听机制2
今天早上的两点收获: 1.addActionListener(其中的setActionCommand函数就是要对对象进行唯一性的标记,便于消息传来后进行处理.理论上actionlistener可以全部 ...
- JAVA事件监听机制的实现
今天学习了java的事件编程机制,略有体会,先在此记下心得. 第一,首先明确几个概念. 事件源:一个产生或者触发事件的对象.事件:承载事件源状态改变时的信息对象.事件监听器接口:实际上就是一个类,该类 ...
随机推荐
- CentOS 7 服务器配置--配置Tomcat开机启动
#编辑Tomcat的文件,追加内容 vi /data/tomcat/apache-tomcat-8.0.43/bin/catalina.sh #追加内容,在CLASSPATH= 上面的第三行 CATA ...
- [H5]range对象的setStart/setEnd方法
1.setStart:表示某个节点的range对象的起点位置;2.setEnd:表示某个节点的range对象的结束位置; 示例如下:<body> <div id="div& ...
- 一个基于JRTPLIB的轻量级RTSP客户端(myRTSPClient)——解码篇:(一)用ffmpeg解码视频
一.概述 myRTSPClient(RTSPClient)获取音视频数据之后,接下来的工作便是将音视频数据交给解码器去解码(ffmpeg),ffmpeg解码之后于是便有了呈现在终端用户(USER)面前 ...
- Zepto源码分析(二)奇淫技巧总结
Zepto源码分析(一)核心代码分析 Zepto源码分析(二)奇淫技巧总结 目录 * 前言 * 短路操作符 * 参数重载(参数个数重载) * 参数重载(参数类型重载) * CSS操作 * 获取属性值的 ...
- Json安全
1.不要使用顶级JSON数组,避免被<script>标签引用. 2.使用POST+密钥获取JSON,尽量不要用GET方式. 3.不要使用eval()将对象放入内存,eval()会执行所传入 ...
- VisualSVN安装图解
VisualSVN安装教程... ----------------------------------- 参考网址:https://www.visualsvn.com/server/download/ ...
- VS2015 'utf-8' codec can't decode byte
近日装好Visual Studio 2015 和PTVS准备练习Python开发,遇到一个棘手的问题,编码错误,提示如下: SyntaxError: (unicode error) 'utf-8' c ...
- 总结找到后台路径的N总思路方法
1, 穷举猜解 现如今可以暴力猜解网站后台登陆地址的软件有很多,从最早的啊D注入工具开始,一直到现在很多常用的工具(通常为SQL注入利用工具)都会带有后台登陆地址猜解的功能. 当然了,这个猜 ...
- 在Linux环境下搭建Tomcat+mysql+jdk环境
按照下面的步骤一步一步来搭建tomcat+jdk+mysql环境. [Linux环境]------我搭建的是64位centos版本的linux系统 1.下载并安装一个VMware workstat ...
- Java入门(7)——循环和debug 调试
循环: while 循环: 格式: int i = 0; ① //初始化条件 while(i < 10) { ② //判断条件 System.out.println(i); ④ //循环 ...