看代码中用到了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的区别的更多相关文章

  1. java中Runnable和Callable的区别

    文章目录 运行机制 返回值的不同 Exception处理 java中Runnable和Callable的区别 在java的多线程开发中Runnable一直以来都是多线程的核心,而Callable是ja ...

  2. Java中Set Map List 的区别

    java中set map list的区别: 都是集合接口 简要说明 set --其中的值不允许重复,无序的数据结构 list   --其中的值允许重复,因为其为有序的数据结构 map--成对的数据结构 ...

  3. Java中Comparable和Comparator接口区别分析

    Java中Comparable和Comparator接口区别分析 来源:码农网 | 时间:2015-03-16 10:25:20 | 阅读数:8902 [导读] 本文要来详细分析一下Java中Comp ...

  4. 转:Java中abstract和interface的区别

    转自:Java中abstract和interface的区别 abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java ...

  5. Java中this与super的区别【6】

    若有不正之处,请多多谅解并欢迎批评指正,不甚感激.请尊重作者劳动成果: 本文原创作者:pipi-changing本文原创出处:http://www.cnblogs.com/pipi-changing/ ...

  6. Java中堆和栈的区别(转)

    栈与堆都是Java用来在Ram中存放数据的地方.与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆.      Java的堆是一个运行时数据区,类的对象从中分配空间.这些对象通过new. ...

  7. 转:二十一、详细解析Java中抽象类和接口的区别

    转:二十一.详细解析Java中抽象类和接口的区别 http://blog.csdn.net/liujun13579/article/details/7737670 在Java语言中, abstract ...

  8. Java中Long与long的区别(转)

    Java中Long与long的区别(转) [本文转载自:http://www.cnblogs.com/bluestorm/archive/2012/04/22/2464739.html] 转载请联系原 ...

  9. java中堆和堆栈的区别

    java中堆和堆栈的区别(一) 1.栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方.与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆. 2. 栈的优势是,存取 ...

随机推荐

  1. SpringBoot端口和访问路径

    更改启动端口:在application.properties配置文件中修改server.port=9090 更改项目访问路径:在application.properties配置文件中修改server. ...

  2. 自定义Web框架

    http协议 HTTP简介 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本 ...

  3. 如何使用PowerShell批量删除Office 365的用户

    概述 本文将演示如何在必要的时候(例如在测试环境),通过PowerShell脚本批量删除Office 365的用户,首先需要通过Get-MsolUser的命令(并且配合筛选条件)获取到符合条件的用户列 ...

  4. Appium Python API 中文版

    Appium_Python_Api文档 1.contextscontexts(self): Returns the contexts within the current session. 返回当前会 ...

  5. linux:安装并使用activeMQ

    1.下载安装包:curl -O https://archive.apache.org/dist/activemq/5.14.0/apache-activemq-5.14.0-bin.tar.gz 2. ...

  6. 蓝桥杯  历届试题 剪格子  dfs

    历届试题 剪格子 时间限制:1.0s   内存限制:256.0MB 问题描述 如下图所示,3 x 3 的格子中填写了一些整数. +--*--+--+ |10* 1|52| +--****--+ |20 ...

  7. HDU 1075 What Are You Talking About (stl之map映射)

    What Are You Talking About Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 102400/204800 K ...

  8. models批量生成数据

    models批量生成数据 1.将数据生成为 列表序列,通过 bulk_create 将数据一次插入数据库中 def host(request): # 插入数据速度快消耗资源少 Hostlist=[] ...

  9. OS模块常用方法

    #OS模块 #os模块就是对操作系统进行操作,使用该模块必须先导入模块: import os #getcwd() 获取当前工作目录(当前工作目录默认都是当前文件所在的文件夹) result = os. ...

  10. Go语言之defer关键字

    类似于java中的finally, 在函数返回来执行, 它用来保证函数一定会作一些事情. package main import "fmt" func main() { defer ...