返回列表 发帖

[经验] java事件处理机制

原文:https://bbs.ichunqiu.com/thread-16435-1-1.html

昨天有个朋友问了我一下,什么是事件监听?

我对事件监听的理解是这样的,当有某个动作触发了这个组件后,java运行时系统将调用对应的方法响应该操作


可能初学者很难理解这个方面,那就举个例子:

一个人有两个法律顾问,律师甲负责民事案件,律师乙负责刑事案件,当有民事案件出现时,律师甲负责帮助他处理案件,当有刑事案件出现时,律师乙负责帮助他处理案件。

这样解释是不是好多了

事件处理过程中涉及到三类对象:
1、Event-事件:每个事件都对应Java中的一个类,例如键盘操作对应的事件类是KeyEvent。
2、Event Source-事件源:事件发生的场所,通常就是各个组件,例如按钮Button
3、Event handler-事件处理者,接收事件对象并对其进行处理的对象

使用授权处理模型进行事件处理的一般方法归纳如下:
1、对于某种类型的事件XXXEvent,定义响应的事件监听器类,该类需要实现与改时间相对应的接口XXXListener;
2、事件源实例化以后,必须进行授权,注册该类事件的监听器,使用addXXXListener(XXXListener)方法类注册监听器。

事件类:
1、与AW有关的事件都是java.awt.AWTEvent泪派生的
2、AWT事件分为两大类:
   低级事件:基于组件和容器的事件。
        如:鼠标的进入,点击,拖放等,或组件的窗口开关等。    高级事件:基于语义的事件,它不和特定的动作相关联,而依赖于触发此事件的类。
        如:TextField中按Enter键会触发ActionEvent事件。滑动滚动条会触发AdjustmentEvent事件。选中项目列表的某一条就会触发ItemEvent事件。

低级事件
ComponentEvent(组件事件:组件尺寸的变化,移动)

ContainerEvent(容器事件:组件增加,移动)

WindowEvent(窗口事件:关闭窗口,图标化)

FocusEvent(焦点事件:焦点的获得和丢失)

KeyEvent(键盘事件:键按下、释放)

MouseEvent(鼠标事件:鼠标单击,移动)



高级事件(语义事件)

ActionEvent(动作事件:按钮按下)

AdjustmentEvent(调节事件:调节滚动条上数值)

ItemEvent(项目事件:修改下拉列表中的选项)TextEvent(文本事件:文本对象改变)

FocusEvent包含的事件:

1、FOCUS_FIRST
    第一个获得焦点的对象标志符


2、FOCUS_GAINED
    确定正获得焦点的组件标志符


3、FOCUS_LAST
     最后一个获得焦点的对象标志符


4、FOCUS_LOST
     确定失去焦点的组件标志符
Mouse Event包含的事件:

MOUSE_PRESSED     当鼠标按下时触发该事件

MOUSE_RELEASED    当鼠标释放时触发该事件

MOUSE_CLICKED     当点击鼠标时触发该事件MOUSE_ENTERED     当鼠标进入指定区域时触发该事件

MOUSE_EXITED      当鼠标退出指定区域时触发该事件



MouseMotion Event包含的事件:MOUSE_MOVED       当鼠标的位置发生改变时触发该事件

MOUSE_DRAGGED     当鼠标按下且位置发生改变时触发该事件

KeyEvent事件包含:

KEY_PRESSED   
  当按下键盘中某个键时触发。


KEY_RELEASED
当释放键盘中按下的键时触发。
KEY_TYPED
  确定按下的是那个键值,通常是一个字符,对应pressed事件。
监听器是接口,根据事件类中定义的动作来定义方法。


AWT中每类事件都有对应的事件监听器。



事件监听器的使用:

1、注册事件监听。
2、在对应的事件监听方法中实现处理操作。

KeyEvent相对应的接口KeyListener :
  1. public interface KeyListener extends EventListener {
  2.         public void keyPressed(KeyEvent ev);
  3.         public void keyReleased(KeyEvent ev);
  4.         public void keyTyped(KeyEvent ev);
  5. }
复制代码
Mouse Event对应的接口MouseListener
  1.    public interface MouseListener extends EventListener {

  2.     public void mouseClicked(MouseEvent?e) ;

  3.     public void mousePressed(MouseEvent?e);

  4.     public void mouseReleased(MouseEvent?e) ;

  5.     public void mouseEntered(MouseEvent?e) ;
  6.          
  7.     public void mouseExited(MouseEvent?e) ;   

  8. }
复制代码
AWT的组件类中提供注册和注销监听器的方法:

注册监听器:

public void
        add<ListenerType> (<ListenerType>listener);
如:button. addMouseListener(this);
注销监听器:
       public void remove<ListenerType> (<ListenerType>listener);
如:button..removeMouseListener(this);

1、在一个类中可以实现多个监听接口。
2、可以由同一个对象监听一个事件源上发生的多种事件 。


3、事件处理者和事件源处在同一个类中。


4、可以通过事件对象获得详细资料。
1、适配器(adapter)是实现XXXListener接口的抽象类。


2、通过adapter类来实现监听可以缩短程序代码,直接通过继承/内部类来实现处理方法。


3、但当需要多种监听器或该类已经有父类的时候,就不能通过适配器来实现事件监听。
java.awt.event包中定义的事件适配器类:

1.ComponentAdapter( 组件适配器)
2.ContainerAdapter( 容器适配器)


3.FocusAdapter( 焦点适配器)4.KeyAdapter( 键盘适配器)
5.MouseAdapter( 鼠标适配器)

6.MouseMotionAdapter( 鼠标运动适配器)

7.WindowAdapter( 窗口适配器)

MouseAdapter鼠标事件适配器类
  1. public abstract class MouseAdapter implements MouseListener {

  2.     public void mouseClicked(MouseEvent e) { }

  3.     public void mousePressed(MouseEvent e) { }

  4.     public void mouseReleased(MouseEvent e) { }

  5.     public void mouseEntered(MouseEvent e) { }

  6.     public void mouseExited(MouseEvent e) { }

  7. }
复制代码

返回列表