JAVA中handleEvent和action的区别

看代码中用到了handleEvent和action,都是对事件进行处理的,觉得这两个方法可以直接合并,于是尝试合并后,发现功能还是有问题,说明两者还是有区别了,查了很久的资料,才基本了解这两者的区别。

发现网上对其资料比较少,但是查询了JDK_API1.6以后,发现这个方法已经被淘汰了,从JDK1.1开始,processEvent(AWTEvent)取代了HandleEvent, 而action从 JDK 1.1 开始,将此组件作为组件(激发动作事件)上的 ActionListener 来注册。所以接下来的部分,可能不是很实用了,但是对其解释还是尽可能的清晰。

JAVA中handleEvent和action的区别

首先从图中可以看出,一个事件产生以后,都会交由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中,需要努力了。

上一篇:ES6常用方法总结


下一篇:封装、property特性及绑定与非绑定方法