栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

java listener 原理

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java listener 原理

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

1)事件:用户对组件的一个操作

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

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

执行顺序如下:

1、给事件源注册监听器

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

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

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

监听器模式:

事件源注册监听器之后,当事件源触发事件,监听器就可以回调事件对象的方法;

更形象地说,监听者模式是基于:注册-回调的事件/消息通知处理模式,就是被监控者将消息通知给所有监控者。

1、注册监听器:事件源.setListener

2、回调:事件源实现onListener

两个示例

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

项目文件结构:

IEventListener.java

package com.mimvp.event;

public interface IEventListener {

void onclickButton();

}

EventSource.java

package com.mimvp.event;

public class EventSource {

private IEventListener mEventListener;

public EventSource() {

// TODO Auto-generated constructor stub

}

// 注册监听器

public void setEventListener(IEventListener listener) {

this.mEventListener = listener;

}

// 触发事件

public void EventHappened() {

this.mEventListener.onclickButton();

}

}

EventTest.java

package com.mimvp.event;

public class EventTest {

public static void main(String[] args) {

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

EventSource eventSource = new EventSource();

// 监听器(实现接口方法)

IEventListener mEventListener = new IEventListener() {

@Override

public void onclickButton() {

// TODO Auto-generated method stub

System.out.println("You click button");

}

};

// 注册监听器到事件源

eventSource.setEventListener(mEventListener);

eventSource.EventHappened();

}

}

实验结果

You click button

示例二:完整模型的demo

项目文件结构:

IMEvent.java

package com.mimvp.event2;

public interface IMEvent {

void setEventListener(IMEventListener iMEventListener);

boolean ClickButton();

boolean MoveMouse();

}

IMEventListener.java

package com.mimvp.event2;

public interface IMEventListener {

void doEvent(IMEvent iMEvent);

}

MEventSource.java

package com.mimvp.event2;

public class MEventSource implements IMEvent {

private IMEventListener iMEventListener;

boolean button;

boolean mouse;

public MEventSource() {

// TODO Auto-generated constructor stub

}

@Override

public void setEventListener(IMEventListener iMEventListener) {

this.iMEventListener = iMEventListener;

}

@Override

public boolean ClickButton() {

return this.button;

}

@Override

public boolean MoveMouse() {

return this.mouse;

}

// 触发事件

public void mouseEventHappened(){

this.iMEventListener.doEvent(this);

}

public void setButton(boolean button) {

this.button = button;

}

public void setMouse(boolean mouse) {

this.mouse = mouse;

}

}

MEventSource2.java

package com.mimvp.event2;

public class MEventSource2 implements IMEvent {

private IMEventListener iMEventListener;

boolean button;

boolean mouse;

public MEventSource2() {

// TODO Auto-generated constructor stub

}

public void setEventListener(IMEventListener iMEventListener) {

this.iMEventListener = iMEventListener;

}

@Override

public boolean ClickButton() {

return this.button;

}

// 触发事件

public void buttonEventHappened(){

button = true;

iMEventListener.doEvent(this);

}

@Override

public boolean MoveMouse() {

return this.mouse;

}

public void setButton(boolean button) {

this.button = button;

}

public void setMouse(boolean mouse) {

this.mouse = mouse;

}

}

EventTest.java

package com.mimvp.event2;

public class EventTest {

public static void main(String[] args) {

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

MEventSource mEventSource = new MEventSource();

MEventSource2 mEventSource2 = new MEventSource2();

// 监听器

IMEventListener iMEventListener = new IMEventListener() {

@Override

public void doEvent(IMEvent iMEvent) {

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

System.out.println("You click button");

}

else if(true == iMEvent.MoveMouse()) {

System.out.println("You move mouse");

}

}

};

// 注册监听器到事件源

System.out.println("+++ mEventSource +++");

mEventSource.setEventListener(iMEventListener);

mEventSource.setMouse(true);// 赋值状态

mEventSource.mouseEventHappened();// 触发鼠标事件

// 注册监听器到事件源

System.out.println("+++ mEventSource2 +++");

mEventSource2.setEventListener(iMEventListener);

mEventSource2.buttonEventHappened();// 触发按钮事件

}

}

【实验结果】

+++ mEventSource +++

You move mouse

+++ mEventSource2 +++

You click button

参考推荐:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/985242.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号