`
lj_gzy2014
  • 浏览: 18242 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

监听器原理

    博客分类:
  • java
阅读更多

            今天有个同学问我,为什么点击按钮,按钮如果添加了监听器,就会有有响应。额,顿时也答不上来,因为以前只是知道怎么用,没想过,为什么加了监听器就会有响应。于是便看了一下MouseListener的api,其类的层次如下:

public interface EventListener {
}
public interface MouseListener extends EventListener

 

MouseEvent 的接口如下

public interface Event
public interface UIEvent extends Event

public interface MouseEvent extends UIEvent

查看网上资料知道:(http://blog.csdn.net/longyulu/article/details/25054697

Java 最新的事件处理方法是基于授权事件模型

事件源生成事件并将其发送至一个或多个监听器

监听器简单地等待,直到它收到一个事件。一旦事件被接受,监听器将处理这些事件,然后返回。

事件:在授权事件模型中,事件是一个描述事件源状态改变的对象 。 
通过鼠标、键盘与 GUI 界面直接或间接交互都会生成事件。 如:按下一个按钮、通过键盘输入一个字符、选择列表框中的一项、点击一下鼠标等。

 

事件源:事件源是一个生成事件的对象
一个事件源可能会生成不同类型的事件
事件源提供了一组方法,用于为事件注册一个或多个监听器。
每种事件的类型都有其自己的注册方法。一般形式为:
public void add<EventType>Listener (TypeListener e)

AWT采取的事件控制过程:监听器对象属于一个类的实例,这个类实现了一个特殊的接口,名为“监听者接口”
事件源是一个对象,它可以注册一个或多个监听器对象,并向其发送事件对象。 
事件源将在发生事件时向所有注册的监听器发送事件对象。 
监听器对象使用事件对象中的信息来确定它们对事件的响应

 

事件模型:
1.基于代理(授权)事件模型
事件处理是一个事件源授权到一个或者多个事件监听器。其基本原理是:组件激发事件,事件监听器监听和处理事件,可以调用组件的add<EventType>Listener方法向组件注册监听器。把其加入到组件以后,如果组件激发了相应类型的事件,那么定义在监听器中的事件处理方法会被调用。

 

2.此模型主要由以三种对象为中心组成
事件源 由它来激发产生事件,是产生或抛出事件的对象。
事件监听器 由它来处理事件
实现某个特定EventListener 接口,此接口定义了一种或多种方法,事件源调用它们以响应该接口所处理的每一种特定事件类型 。
事件 具体的事件类型
事件类型封装在以java.util.EventObject为根的类层次中。当事件发生时,事件记录发生的一切事件,并从事件源传播到监听器对象


来源:http://www.javaweb.cc/language/java/272459.shtml

一. 事件监听器的参与者:

1.事件对象: 
一般继承自java.util.EventObject对象,由开发者自行定义.

2.事件源: 
就是触发事件的源头,不同的事件源会触发不同的事件类型.

3.事件监听器: 
事件监听器负责监听事件源发出的事件.一个事件监听器通常实现java.util.EventListener这个标识接口. 

其整个处理过程是这样的,事件源可以注册事件监听器对象,并可以向事件监听器对象发送事件对象.事件发生后,事件源将事件对象发给已经注册的所有事件监听器. 
监听器对象随后会根据事件对象内的相应方法响应这个事件.

package listener_v;

import java.util.EventObject;

//事件
public class DemoEvent extends EventObject{

	public DemoEvent(Object source) {
		super(source);
		
	}

}

 

package listener_v;

import java.awt.event.MouseListener;
import java.util.ArrayList;
import java.util.List;

import org.w3c.dom.events.MouseEvent;

//事件源,有监听器注册和监听器代理两个方法
public class DemoEventSource{
	private List<DemoListener> listenerList=new ArrayList<DemoListener>();//存储监听事件源的事件监听器对象
	
	public DemoEventSource(){}
	
	//监听器注册,实际就是加入事件监听的列表中
	public void addDemoListener(DemoListener listener){
		listenerList.add(listener);
	}
	
	//将事件通知监听器,交由监听器代理
    public void notifyDemoEvent(){
    	for(int i=0;i<listenerList.size();i++){
    		 DemoEvent demoEvent = new DemoEvent(this);  
            
    		listenerList.get(i).processEvent(demoEvent);
    	}
    	
    }
}

 

package listener_v;

import java.util.EventListener;
//监听接口
public interface DemoListener extends EventListener{


	public void processEvent(DemoEvent demoEvent); 
}

 

package listener_v;

public class TestDemoListener {

	
	
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
          new TestDemoListener();
	}
	public TestDemoListener(){
		//事件源
		
		DemoEventSource eventsource=new DemoEventSource();
		
		//为事件添加监听器
		eventsource.addDemoListener(new DemoListener() {
			//更具事件类型,监听器执行响应
			@Override
			public void processEvent(DemoEvent demoEvent) {
				// TODO Auto-generated method stub
				System.out.println("我的第一个监听器程序");
			}
		});
		//事件触发时,将事件分发给所有的监听器
		eventsource.notifyDemoEvent();
	}
}

              采用事件分发机制,就实现了界面元素与触发事件处理的分离

分享到:
评论

相关推荐

    java监听器的实现和原理详解

    Java监听器的实现和原理详解 Java监听器是一种非常重要的设计模式,在Java中广泛应用于事件驱动编程。监听器模式的主要思想是将事件源和事件处理器分离,使得事件源可以独立于事件处理器,提高了系统的灵活性和可...

    zookeeper监听器原理的详解

    了解Zookeeper监听器原理对于开发分布式应用和理解分布式系统中的节点状态管理非常重要。掌握这些知识点能够帮助开发者更好地使用Zookeeper,设计出响应迅速且稳定可靠的分布式应用架构。对于希望进一步深入学习...

    oracle监听器深入讲解

    "Oracle 监听器深入讲解" Oracle 监听器是 Oracle 数据库的核心组件之一,负责管理 Oracle 数据库和客户端之间的通讯。...了解 Oracle 监听器的工作原理和配置可以帮助开发者更好地使用 Oracle 数据库。

    java一个监听器的例子

    为了深入了解监听器的工作原理,可以进一步研究每个监听器接口及其方法,以及如何将它们应用于不同类型的组件。此外,还可以使用`EventListenerList`和`EventObject`类来管理和分发事件,这在实现自定义事件模型时...

    监听器.zip

    在Java编程领域,监听器(Listener)是一种关键的组件,主要用于事件驱动编程。在这个名为"监听器.zip"的压缩包中,包含了三个示例项目...同时,理解监听器的工作原理也能为理解和使用其他基于事件的框架打下坚实基础。

    一个简单的监听器案例项目

    通过这个案例项目,开发者可以深入理解监听器的工作原理和使用方式,从而在实际项目中更有效地管理和控制应用程序的行为。在学习和分析项目代码时,应注意以下几个关键点: - 查看web.xml配置文件,理解监听器如何...

    事件处理监听器

    在编程领域,事件处理是构建用户界面(UI)和交互式应用程序的核心部分。...这些动作会触发程序中的特定行为,通常通过事件监听器来实现。...通过学习和实践这些代码,你可以更好地理解和掌握事件处理监听器的工作原理。

    自己编写一个Java监听器

     当范围对象的状态发生变化的时候,服务器自动调用监听器对象中的方法。  例如:创建一个“人”类Class Person  人拥有吃的方法public void eat(){},我们的目的是,在这个人吃之前要提醒他洗手,所以我们要...

    java监听器和过滤器详解

    它的工作原理类似于事件驱动模型,其中事件由容器触发,监听器负责响应这些事件。 ##### 监听器分类 - **生命周期监听器**:主要包括`ServletRequestListener`、`HttpSessionListener`、`ServletContextListener`,...

    javaEE监听器

    在"ListenerTest"这个文件中,可能包含了实现监听器功能的代码示例,你可以通过查看和运行这些代码来深入理解监听器的工作原理和用法。此外,也可以结合其他JavaEE组件,如Servlet和JSP,来创建更复杂的Web应用程序...

    servlet监听器案例

    在本文中,我们将深入探讨Servlet监听器的工作原理、配置和使用,结合具体的"web.xml"配置以及JSP页面的应用。 首先,我们需要了解什么是Servlet监听器。Servlet监听器是实现了Java Servlet API中特定接口的类,...

    jsp/servlet中过滤器和监听器的区别

    - **工作原理**:监听器通过实现Servlet规范中的各种监听器接口,如`ServletContextListener`、`HttpSessionListener`、`ServletRequestListener`等,当触发相应事件时,容器会调用相应的监听器方法。 - **应用...

    servlet监听器技术源码

    Servlet监听器技术是Java Servlet规范中的一项重要特性,它允许开发者在特定的Servlet容器事件发生时执行自定义的代码逻辑。这些事件可以包括Web应用程序的初始化、终止,或者是Servlet或Servlet上下文...

    java过滤器、监听器拦截器原理个人总结.pdf

    Java 过滤器、监听器拦截器原理个人总结 Java 过滤器是 Java Servlet 规范中的一种机制,用于对请求和响应进行过滤。过滤器可以实现用户身份验证、日志记录、数据压缩等功能。创建一个过滤器需要两个步骤:创建 ...

    监听器实例jsp编写望大家喜欢

    学习如何在JSP中使用监听器,不仅可以帮助开发者更好地理解Java Web应用程序的工作原理,还能提升应用的健壮性和可维护性。你可以通过阅读提供的源代码和配置文件,结合实际的Web服务器运行,来深入理解监听器在实际...

    Java的监听器种类

    ### Java的监听器种类 Java中的监听器是一种特殊类型的对象,它们主要负责监听特定的事件并在这些事件发生时执行相应的动作...理解并熟练掌握这些监听器的工作原理及其使用方法对于成为一名优秀的Java开发者至关重要。

    javaweb_高级_过滤器_监听器

    过滤器原理 过滤器是Servlet规范中的一个重要组成部分,它的工作原理在于拦截客户端对Web资源的请求。当用户尝试访问某个Servlet或JSP时,过滤器会在请求到达目标组件之前介入,执行自定义的业务逻辑。过滤器的...

    Servlet监听器

    Servlet监听器原理,具体使用场景,具体实例

    监听器Listener

    在Java世界中,"监听器Listener"是一种广泛使用的机制,主要应用于事件驱动编程。它允许程序注册对特定事件的兴趣,并在这些事件发生时接收通知。监听器是接口,实现这些接口的类通常需要被添加到特定组件(如...

    第13章使用Servlet过滤器和监听器

    第13章使用Servlet过滤器和监听器,基础知识

Global site tag (gtag.js) - Google Analytics