JAVA中handleEvent和action的区别
看代码中用到了handleEvent和action,都是对事件进行处理的,觉得这两个方法可以直接合并,于是尝试合并后,发现功能还是有问题,说明两者还是有区别了,查了很久的资料,才基本了解这两者的区别。
发现网上对其资料比较少,但是查询了JDK_API1.6以后,发现这个方法已经被淘汰了,从JDK1.1开始,processEvent(AWTEvent)取代了HandleEvent, 而action从 JDK 1.1 开始,将此组件作为组件(激发动作事件)上的 ActionListener 来注册。所以接下来的部分,可能不是很实用了,但是对其解释还是尽可能的清晰。
首先从图中可以看出,一个事件产生以后,都会交由HandleEvent()处理,然后HandleEvent()会将部分事件细分给action()处理。
action()处理的是ACTION_EVENT,即由构件产生的事件;而handleEvent处理所有的小应用程序所接受的事件,由它将事件送给相对应的方法。
而原有的handleEvent如下:
public boolean handleEvent(Event evt) {
switch(evt) {
case Event.MOUSE_ENTER:
return mouseEnter(evt,evt.x,evt.y);
case Event.MOUSE_EXIT:
return mouseExit(evt,evt.x,evt.y);
case Event.MOUSE_MOVE:
return mouseMove(evt,evt.x,evt.y);
case Event.MOUSE_DRAG:
return mouseDrag(evt,evt.x,evt.y);
case Event.MOUSE_UP:
return mouseUp(evt,evt.x,evt.y);
case Event.MOUSE_DOWN:
return mouseDown(evt,evt.x,evt.y);
case Event.KEY_PRESS:
case Event.KEY_ACTION:
return keyDown(evt,evt.key);
case Event.KEY_RELEASE:
case Event.KEY_ACTION_RELEASE:
return keyUp(evt,evt.key);
case Event.ACTION_EVENT:
return action(evt,evt.arg);
case Event.GOT_FOCUS:
return gotFocus(evt,evt.arg);
case Event.LOST_FOCUS:
return lostFocus(evt,evt.arg);
}
return false;
}
这里明显的说明只有一部分事务会交由action处理,这些事务一般是组建的事件产生的,因此如果不是组建的事件,但将这个事件的处理方法写在了action中,这个事件是不会被正常处理的。
同时想指出的是,e.id和e.target的问题。在handleEvent函数中,是用e.id区分不同事件的,在action中是用e.target区分事件,这样导致的结果是不同的事件,有不同的e.id,但其有相同的e.target;比如我不想写action()对一个action进行处理,那么是可以把事件的处理放在handleEvent中进行处理的,但是在handleEvent中直接写比如
if( e.target == button1 )//对按钮button1事件进行处理
恐怕是要出问题的,但是下面的写法是没有问题的:
if( e.id == Event.ACTION_EVENT && e.target == button1 )
这就是关于handleEvent以及action的区别和使用需要注意的地方,表示学习落后了,JDK到了1.6了,我还在JDK1.0中,需要努力了。
JAVA中handleEvent和action的区别的更多相关文章
- java中Runnable和Callable的区别
文章目录 运行机制 返回值的不同 Exception处理 java中Runnable和Callable的区别 在java的多线程开发中Runnable一直以来都是多线程的核心,而Callable是ja ...
- Java中Set Map List 的区别
java中set map list的区别: 都是集合接口 简要说明 set --其中的值不允许重复,无序的数据结构 list --其中的值允许重复,因为其为有序的数据结构 map--成对的数据结构 ...
- Java中Comparable和Comparator接口区别分析
Java中Comparable和Comparator接口区别分析 来源:码农网 | 时间:2015-03-16 10:25:20 | 阅读数:8902 [导读] 本文要来详细分析一下Java中Comp ...
- 转:Java中abstract和interface的区别
转自:Java中abstract和interface的区别 abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java ...
- Java中this与super的区别【6】
若有不正之处,请多多谅解并欢迎批评指正,不甚感激.请尊重作者劳动成果: 本文原创作者:pipi-changing本文原创出处:http://www.cnblogs.com/pipi-changing/ ...
- Java中堆和栈的区别(转)
栈与堆都是Java用来在Ram中存放数据的地方.与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆. Java的堆是一个运行时数据区,类的对象从中分配空间.这些对象通过new. ...
- 转:二十一、详细解析Java中抽象类和接口的区别
转:二十一.详细解析Java中抽象类和接口的区别 http://blog.csdn.net/liujun13579/article/details/7737670 在Java语言中, abstract ...
- Java中Long与long的区别(转)
Java中Long与long的区别(转) [本文转载自:http://www.cnblogs.com/bluestorm/archive/2012/04/22/2464739.html] 转载请联系原 ...
- java中堆和堆栈的区别
java中堆和堆栈的区别(一) 1.栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方.与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆. 2. 栈的优势是,存取 ...
随机推荐
- UEFI rootkit 工具LoJax可以感染电脑主板(mainboard)
1.UEFI(Unified Extensible Firmware Interface)统一扩展接口,UEFI rootkit是以在UEFI中植入rootkit ,18年9月份ESET首次公开了境外 ...
- java----面对对象
面对对象: public class Demo { public static void main(String[] args){ Horse h = null; h = new Horse(); / ...
- Git使用三:git的使用流程
先创建仓库 创建一个文件夹,作为仓库使用 初始化仓库,在仓库目录的命令行下输入:git init 第一步:创建一个文件,并写入内容,这里写入内容的时候,要把编码设置为utf-8 第二步:输入命令将文件 ...
- Python之yield简明详解
yield在Python中被称之为生成器(只能在函数中使用),他的作用是将函数中每次执行的结果以类似元组的形式保存起来一遍后续使用. 什么是生成器? 通过列表生成式,我们可以直接创建一个列表.但是,受 ...
- java获取当前时间精确到毫秒
转载:http://af8991.iteye.com/blog/1217672 import java.text.SimpleDateFormat; import java.util.Date; im ...
- Datagrip导入导出为一个sql文件详细说明 (mysql)
Datagrip导入导出为一个sql文件详细说明 导出: (我的无法截图, 借用一张) 导入: (我的无法截图, 再借用一张) 完
- Html中,id、name、class、type的区别
<input type="text" name="name" id="name" class="txt"> ...
- NHibernate:no persister for 异常
几种原因: 1.配置文件后缀名写错 mapping file 必须是.hbm.xml结尾 2.Web.config配置里面引用实体 <session-factory> .......... ...
- 简单有效:解决 Excel 打开 UTF-8 编码 CSV 文件乱码的 BUG
https://blog.csdn.net/Sukie_csdn/article/details/78752969
- springboot调用http方式
1.httpclient 2.okhttp 3.feign 安装Gradle包 compile 'org.springframework.cloud:spring-cloud-starter-open ...