昨天有个朋友问了我一下,什么是事件监听?
我对事件监听的理解是这样的,当有某个动作触发了这个组件后,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 :
public interface KeyListener extends EventListener { public void keyPressed(KeyEvent ev); public void keyReleased(KeyEvent ev); public void keyTyped(KeyEvent ev); }
Mouse Event对应的接口MouseListener
public interface MouseListener extends EventListener { public void mouseClicked(MouseEvent?e) ; public void mousePressed(MouseEvent?e); public void mouseReleased(MouseEvent?e) ; public void mouseEntered(MouseEvent?e) ; public void mouseExited(MouseEvent?e) ; }
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鼠标事件适配器类
public abstract class MouseAdapter implements MouseListener { public void mouseClicked(MouseEvent e) { } public void mousePressed(MouseEvent e) { } public void mouseReleased(MouseEvent e) { } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } }