java监听的标志_java监听器

一、先看看jdk提供的event包:

public interface EventListener:所有事件侦听器接口必须扩展的标记接口。

packagejava.util;/*** A tagging interface that all event listener interfaces must extend.

*@sinceJDK1.1*/

public interfaceEventListener {

}

public class EventObject extends Object implements Serializable所有事件状态对象都将从其派生的根类。 所有 Event 在构造时都引用了对象 "source",在逻辑上认为该对象是最初发生有关 Event 的对象。

packagejava.util;

public class EventObject implementsjava.io.Serializable {private static final long serialVersionUID = 5516075349620653480L;/*** The object on which the Event initially occurred.*/

protected transientObject source;/*** Constructs a prototypical Event.

*

*@paramsource The object on which the Event initially occurred.

*@exceptionIllegalArgumentException if source is null.*/

publicEventObject(Object source) {if (source == null)throw new IllegalArgumentException("null source");this.source =source;

}

publicObject getSource() {returnsource;

}}

监听器接口定义了一个类要成为监听器必须具备的功能。所有的监听器接口也都必须继承监听器接口基类 java.util.EventListener;EventListener本身没有定义任何方法,它只是一个标志接口,用来表明所有继承自 EventListener的接口属于监听器接口。

监听器接口定义了监听器必须实现的方法。事件处理方法以事件对象作为入口参数,包含对事件进行处理的代码,方法名称任意,如processEvent或者handleEvent之类。

监听器是监听器接口的实现者,提供监听器接口中定义的所有方法的实现代码。简单情形下,一个监听器只监听一种类型的事件,即实现一种监听器接口。复杂的监 听器可以实现多种监听器接口,监听多种类型的事件。在事件处理方法代码中,监听器可以从入口参数中获得事件对象,并通过该对象获得所需的信息,例如事件 源、事件发生时间等等。事件源是一定可以从事件对象中 获得的,因为事件基类EventObject提供了getSource()方法,除此以外,能从事件对象中获得的信息,取决于事件类的定义。

作为事件源的类,必需满足以下条件:

事件源必须在内部维护一个已注册监听器的列表。当某监听器注册时,该监听器被添加到列表中,而监听器注销时,则从列表中删除;

事件源必须提供注册方法,以允许监听器注册为事件的接收者;

事件源必须提供注销方法,以允许监听器注销,停止对事件的接收;

事件源必须能够实例化事件类,即产生事件对象;

当事件对象被产生后,事件源必须向所有的注册监听器广播该消息。事件的广播,是通过逐个调用监听器列表中所有监听器的事件处理方法来实现的。

在Java的事件驱动模式中,事件源是最复杂的。多数情况下,程序员只需编写监听器的代码,而并不需要编写事件源代码。

二、代码实现

1、定义自己业务相关的事件:

packagetest.listener;importjava.util.EventObject;public class DoorEvent extendsEventObject {private String doorState = "open";publicDoorEvent(Object source) {super(source);

}publicDoorEvent(Object source, String state) {super(source);

doorState=state;

}publicString getDoorState() {returndoorState;

}public voidsetDoorState(String doorState) {this.doorState =doorState;

}

}

2、相应的事件监听器接口,和实现类

packagetest.listener;importjava.util.EventListener;public interface DoorListener extendsEventListener{public voiddoorOpen(DoorEvent event);

}

实现类

packagetest.listener;public class DoorListenerImpl implementsDoorListener {

@Overridepublic voiddoorOpen(DoorEvent event) {if (event.getDoorState()!=null && event.getDoorState().equals("open")) {

System.out.println("door is open");

}else{

System.out.println("door is closed");

}

}

}

3、事件源,必须要有注册、注销监听器的方法

package test.listener;

import java.util.HashSet;

import java.util.Set;

public class DoorManager {

private Set listeners;

public void addDoorListener(DoorListener listener) {

if (null == listeners) listeners = new HashSet();

listeners.add(listener);

}

public void removeDoorListener(DoorListener listener) {

if (listeners == null) return;

listeners.remove(listener);

}

protected void fireWorkspaceOpened() {

if (listeners == null) return;

DoorEvent event = new DoorEvent(this, "open");

notifyListener(event);

}

protected void fireWorkspaceClosed() {

if (listeners == null) return;

DoorEvent event = new DoorEvent(this, "closed");

notifyListener(event);

}

private void notifyListener(DoorEvent event) {

for (DoorListener listener : listeners) {

listener.doorOpen(event);

}

}

}

4、main

packagetest.listener;public classApp {public static voidmain(String[] args) {

DoorManager manager= newDoorManager();

manager.addDoorListener(newDoorListenerImpl());

manager.addDoorListener(newDoorListener() {

@Overridepublic voiddoorOpen(DoorEvent event) {

System.out.println("break the door");

}

});//manager.fireWorkspaceOpened();//manager.fireWorkspaceClosed();

}

}

Reference

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值