java监听器原理_java监听器的原理与实现

本文介绍了Java事件监听器的工作原理,包括事件、事件源和事件监听器的概念。通过两个示例演示了监听器的注册和事件触发过程,展示了如何处理按钮点击和鼠标移动事件。
摘要由CSDN通过智能技术生成

监听器模型涉及以下三个对象,模型图如下:

(1)事件:用户对组件的一个操作,称之为一个事件

(2)事件源:发生事件的组件就是事件源

(3)事件监听器(处理器):监听并负责处理事件的方法

0818b9ca8b590ca3270a3433284dd417.png

执行顺序如下:

1、给事件源注册监听器

2、组件接受外部作用,也就是事件被触发

3、组件产生一个相应的事件对象,并把此对象传递给与之关联的事件处理器

4、事件处理器启动,并执行相关的代码来处理该事件。

下面,来看两个demo。

一、简化了上图所示的模型,仅仅包含事件源与监听器

/*

* 事件源:事件发生的地点

*/

public class EventSource {

private IEventListener mEventListener;

// 注册监听器

public void setEventListener(IEventListener arg) {

mEventListener = arg;

}

// 触发事件

public void EventHappened() {

mEventListener.onclickButton();

}

}

/*

* 事件监听器,事件处理器

*/

public interface IEventListener {

void onclickButton();

}

public class Test {

public static void main(String[] args) {

// 事件源(被监听的对象)

EventSource m1 = new EventSource();

// 监听器

IEventListener mEventListener = new IEventListener() {

@Override

public void onclickButton() {

// TODO Auto-generated method stub

System.out.println("你点击了按钮");

}

};

// 注册监听器到事件源

m1.setEventListener(mEventListener);

m1.EventHappened();

}

}【实验结果】

你点击了按钮

二、完整模型的demo

/*

* 事件

*/

public interface IEvent {

void setEventListener(IEventListener arg);

boolean ClickButton();

boolean MoveMouse();

}

/*

* 事件监听器,调用事件处理器

*/

public interface IEventListener {

void doEvent(IEvent arg);

}

/*

* 事件源:事件发生的地点

*/

public class EventSource implements IEvent{

private IEventListener mEventListener;

boolean button;

boolean mouse;

//注册监听器

@Override

public void setEventListener(IEventListener arg){

mEventListener = arg;

}

//触发事件

public void mouseEventHappened(){

mouse = true;

mEventListener.doEvent(this);

}

@Override

public boolean ClickButton() {

return button;

// TODO Auto-generated method stub

}

@Override

public boolean MoveMouse() {

// TODO Auto-generated method stub

return mouse;

}

}

public class EventSource2 implements IEvent {

private IEventListener ml;

boolean button;

boolean mouse;

@Override

public void setEventListener(IEventListener arg) {

ml = arg;

}

@Override

public boolean ClickButton() {

// TODO Auto-generated method stub

return button;

}

@Override

public boolean MoveMouse() {

// TODO Auto-generated method stub

return mouse;

}

// 触发事件

public void buttonEventHappened() {

button = true;

ml.doEvent(this);

}

}

public class Test {

public static void main(String[] args) {

// 事件源(被监听的对象)

EventSource m1 = new EventSource();

EventSource2 m2 = new EventSource2();

// 监听器

IEventListener mEventListener = new IEventListener() {

@Override

public void doEvent(IEvent arg) {

if (true == arg.ClickButton()) {

System.out.println("你点击了按钮");

}else if(true == arg.MoveMouse()){

System.out.println("你移动了鼠标");

}

}

};

// 注册监听器到事件源

m1.setEventListener(mEventListener);

m1.mouseEventHappened();

// 注册监听器到事件源

m2.setEventListener(mEventListener);

m2.buttonEventHappened();

}

}【实验结果】 你移动了鼠标 你点击了按钮

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值