扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
下面用一个演示性的例子来说明事件及其处理过程
一.事件的组成
如果想要自定义一个事件,则必须提供一个事件的监听接口以及一个事件类。在JAVA中监听接口继承java.util.EventListener,事件类继承java.util.EventObject.很多基本的事件在编程环境中都已经提供可以很方便使用,但是在自定义事件中必须要要了解这些。
下面是一个事件类的代码,事件类可以向用户处理程序提供被监听类的信息
import java.util.*; public class PropertyEvent extends EventObject { public PropertyEvent(){} } |
import java.util.*; public interface PropertyListener extends EventListener { public void propertyChanged(PropertyEvent propertyEvent); } |
下面是一段简要的被监听类代码,通过代码分析事件处理过程
import java.util.*; public class Exam { private int property; |
private Set listeners= new HashSet(); ..... public void addListener(PropertyListener propertyListener){ //listeners必须保证只能被一个线程访问 synchronized(listeners){ listeners.add(propertyListener); } } public void firePropertyChange(){ Iterator iterator; synchronized(listeners){ //将listeners中的类名放到iterator iterator = new HashSet(listeners).iterator(); } //创建事件类 PropertyEvent propertyEvent = new PropertyEvent(); while(iterator.hasNext()){ PropertyListener propertyListener = (propertyListener) iterator.next(); //调用用户的事件处理程序 propertyListener.propertyChanged(propertyEvent); } } } |
三.事件处理的使用
1.基本用法
public Exam exam; exam.addListener(this); public void propertyChange(PropertyEvent event){...} |
将当前类注册到listeners.
2.一个被监听对象可以有多个监听对象
exam.addListener(listener1);
exam.addListener(listener2);
这样当exam的property发生变化时,actionListener1和actionListener2的处理程序都会
被调用。当然listener1和listener2必须都是已实现接口方法的类。
3.被监听的对象也可以是实现了方法的接口
exam.addListener( new PropertyListener(){ //用户定义事件处理过程 public void propertyChange(PropertyEvent event){ ... } ); |
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者