11级_Java_曹建波5.04 事件适配器
来源:互联网 发布:snmp网络管理模型 编辑:程序博客网 时间:2024/06/05 06:46
事件适配器
为简化程序员的编程负担,JDK中针对大多数事件监听器接口提供了相应的实现类(事件适配器Adapter),在适配器中,实现了相应监听器接口的所有方法,但不做任何处理,即只是添加了一个空的方法体。
WindowAdapter适配器的定义:
package java.awt.event;
public abstract class WindowAdapterimplements WindowListener{
voidwindowClosing(WindowEvent){}
voidwindowOpened(WindowEvent e){}
voidwindowIconified(WindowEvent e){}
voidwindowDeiconified(WindowEvent e){}
voidwindowClosed(WindowEvent e){}
voidwindowActivated(WindowEvent e){}
voidwindowDeactivated(WindowEvent e){}
}
程序员在定义监听器类时就可以不再直接实现监听接口,而是继承事件适配器类,并只重写所需要的方法即可。
JDK中并没有为所有的监听器接口都提供相应的适配器类。
监听器接口
对应适配器
说明
MouseListener
MouseAdapter
鼠标事件适配器
MouseLotionListener
MouseMotionAdapter
鼠标运动事件适配器
WindowListener
WindowAdapter
窗口事件适配器
FocusListener
FocusAdapter
焦点事件适配器
KeyListener
KeyAdapter
键盘事件适配器
ComponentListener
ComponentAdapter
组件事件适配器
ContainerListener
ContainerAdapter
容器事件适配器
示例3:改进的窗口事件处理。
import java.awt.event.WindowEvent;
import java.awt.event.WindowAdapter;
public class MyAdapter extendsWindowAdapter{
publicvoid windowClosing(WindowEvent e){
System.exit(0);
}
}
使用适配器类的优点:不用实现WindowListener接口中所有的抽象方法,需要哪个方法,重写哪个方法即可,使开发者得以解脱。
但需注意:适配器类并不能完全取代相应的监听器接口,由于Java 单继承机制的限制,如果要定义的监听器类需要同时处理两种以上的GUI事件,则只能直接实现有关的监听器接口,而无法只通过继承适配器实现。
内部类和匿名类在GUI 事件处理中的作用
内部类
在Java GUI 事件处理中,经常采用内部类来定义监听器类,这是因为监听器类中封装的业务逻辑具有非常强的针对性,通常没有重用价值。而且作为内部类的监听器对象可以直接访问外部类中的成员,这可以提供很大的便利。
示例4:在GUI 事件处理中使用内部类。
public class MyFrame extends Frame{
…
}
匿名类
addMouseMotionListener(newMouseMotionAdapter(){
publicvoid mouseDragged(MouseEvent e){
txtDisplay.setText("鼠标位置"+e.getPoint());
}
});
多重监听
由于事件源可以产生多种不同类型的事件,因而可以注册多种不同类型的监听器,但是当事件源发生了某种类型的事件时,只触发事先已就该种事件类型注册过的监听器。
事件源组件和监听器对象的对应关系:
针对同一个事件源组件的同一种事件也可以注册多个监听器。
针对同一个事件源组件的多种事件也可以注册同一个监听器对象进行处置。只是这要求监听器对象是一个“多面手”,即有能力处理各种不同类型的事件
同一个监听器对象可以被同时注册到多个不同的事件源上。
- 11级_Java_曹建波5.04 事件适配器
- 11级_Java_曹建波5.03 GUI的组成&GUI事件处理
- 11级_Java_曹建波4.07 方法
- 11级_Java_曹建波3.29 控制流程
- 11级_Java_曹建波4.11 接口
- 11级_Java_曹建波4.17 数组
- 11级_Java_曹建波5.02 GUI程序设计
- 11级_Java_曹建波5.10 字符流
- 11级_Java_曹建波5.14 字节流
- 11级_Java_曹建波5.18 多线程
- 11级_Java_曹建波5.30 WHERE子句
- 11级_Java_曹建波6.05 索引
- 11级_Java_曹建波6.08 存储过程
- 11级_Java_曹建波6.12 触发器
- 11级_Java_曹建波6.14 事务
- 11级_Java_曹建波6.15 JDBC开发
- 11级_Java_曹建波9.03 多线程
- 11级_Java_曹建波9.04 多线程2
- Android 内存溢出解决方案(OOM) 整理总结
- 使用EMM还是使用AMM
- Project Eurler - Problem 1
- 根据当前流程步骤触发事件
- 面试的经验总结
- 11级_Java_曹建波5.04 事件适配器
- Project Euler - Problem 2
- 进程和线程的区别
- Project Euler - Problem 3
- Windows Phone 开发学习笔记(五) Hello Windows Phone之虎头蛇尾
- Project Euler - Problem 4
- Project Euler - Problem 5
- 我理解的逻辑地址、线性地址、物理地址和虚拟地址(补充完整了)
- Project Euler - Problem 6