java事件监听机制

java 事件机制

java的事件机制一般包括三个部分:EventObject,EventListener和Source。

EventObject

java.util.EventObject是事件状态对象的基类,它封装了事件源对象以及和事件相关的信息。所有java的事件类都需要继承该类。

EventListener

java.util.EventListener是一个标记接口,就是说该接口内是没有任何方法的。所有事件监听器都需要实现该接口。事件监听器注册在事件源上,当事件源的属性或状态改变的时候,调用相应监听器内的回调方法。

Source

举例

属性 name 和status 改变,被监管

public class Door1 {
    private String state = "";
    private String name = "";
    private DoorStateListener stateListener;
    private DoorNameListener  nameListener;
    
    public void setState(String newValue) {
        if (state != newValue) {
            state = newValue;
            if (stateListener != null){
                //注意参数传递
                Door1Event event = new Door1Event(this, "state",newValue);
                stateListener.doorEvent(event);             
            }
        }        
    }
    
    public void setName(String newValue) {
        if (name != newValue) {
            name = newValue;
            if (nameListener != null){
                Door1Event event = new Door1Event(this,"name", newValue);
                nameListener.doorEvent(event);                 
            }
        }  
    }
 
    public void setStateListener(DoorStateListener stateListener) {
        this.stateListener = stateListener;
    }

    public void setNameListener(DoorNameListener nameListener) {
        this.nameListener = nameListener;
    }

    public String getState() {
        return state;
    }

    public String getName() {
        return name;
    }
}

2.数据传递对象 Door1Event

import java.util.EventObject;

public class Door1Event extends EventObject {
    private static final long serialVersionUID = 6496098798146410884L;
    
    private final String key ; 
    private final String value  ; 
    
    public Door1Event(Object source,String key , String value) {
        super(source);
        this.key = key;
        this.value = value;
    }

    public String getValue() {
        return value;
    }

    public String getKey() {
        return key;
    }
}

3.被监管对象
Door1StateObserver

class DoorStateListener implements EventListener {
    public void doorEvent(Door1Event event) {
        if (event.getValue() != null && event.getValue().equals("open")) {
            System.out.println("门1打开");
        } else {
            System.out.println("门1关闭");
        }
    }
}

Door1NameObserver

class DoorNameListener implements EventListener {
    public void doorEvent(Door1Event event) {
        Door1 door = (Door1) event.getSource();
        System.out.println("I got a new name,named \"" + door.getName() + "\"");
    }
}

4 .Door1Test

public class Door1Test {
    public static void main(String[] args) {

        Door1 door = new Door1();
        door.setStateListener(new DoorStateListener());   
        door.setNameListener (new DoorNameListener());    
        // 开门
        door.setState("open");
        System.out.println("我已经进来了");
        // 关门
        door.setState("close");
        // 改名
        door.setName("dengzy"); } }

参考:

设计模式_EventObject和EventListener
java 事件机制

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值