`
abruzzi
  • 浏览: 453487 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

事件监听器模式(一个简单的例子)

阅读更多

事件监听器模式(一个简单的例子)


在GUI程序设计中,在设计时通常不会知道用户的动作什么时候会发生,如用户可能点击某一
个按钮,也可能不点击,而且点击按钮的时机在运行时才可能知道。如果用传统的程序控制
方式,则很难做到准确的响应。通常这种情况或者类似的情况下,我们可以使用事件/监听器模式。

将一个监听器(listener)与特定的控件(如按钮等)绑定起来,当发生用户点击等事件(Event)时,
调用监听器的处理方法,从而响应用户的动作。是为事件/监听器模式。

事件有很多种,而且事件发生的时序是不确定的。可以简单的定义一个事件的接口,如下例:

interface Event{
    static int event1 = 0;
    static int event2 = 1;
    static int event3 = 2;
    ...
    int getEventType();
}
 



一个监听器的接口的一种可能形式:

interface listener{
    void handleEvent(Event event);
}
 



实现监听器接口的类可以根据事件的类型作出具体的响应方式如:

class ListenerImpl implements Listener{
some other methods of this implementation;
...
void handleEvent(Event event){
    switch(event.getEventType()){
        case Event.event1:
            doSomething();
            break;
        case Event.event2:
            doSomethingElse();
            break;
        default:
            break;
    }
}

GUIThread thread = new GUIThread();
thread.setListener(this);//注册监听器
...
}
 


在GUI的主流程中,需要有一个Event的实现者,和一个发起事件的组件,如:

class EventImpl implements Event{
    private int type;
    public EnentImpl(int type){
        this.type = type;
    }
}

class GUIThread{
    private Listener listener;
    public void setListener(Listener listener){
        this.listener = listener;
    }
   
    public void execute(){
        if(this.listener != null){
            Event event = new EventImpl(type);//触发了某事件
            listener.handleEvent(event);
        }
    }
}

 

当然,这个实现只是一个原理性的描述,应该可以很容易根据这个描述作出自己的实现。关于事件的处理以及事件类型的定义等可以完全根据自己的需求定制。

 

分享到:
评论
1 楼 lovinchan 2008-11-27  
                   

相关推荐

    Java设计模式之监听器模式实例详解

    Kid类代表另一个事件源,拥有添加监听器和触发事件的方法。WashingHandsListener接口定义了一个fireAfterEventInvoked方法,该方法会在事件(WashingHandsEvent)发生时被调用。WashingHandsEvent事件对象封装了洗手...

    java一个监听器的例子

    以下是一个简单的例子,展示了如何创建一个使用动作监听器的Java程序: ```java import javax.swing.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class ListenerExample...

    java监听者模式

    1. `Button` 类:这是一个事件源,它会触发点击事件。在Java Swing中,这个类可能是`JButton`。 2. `ActionListener` 接口:这是监听器接口,定义了一个`actionPerformed`方法,用于处理按钮点击事件。 3. 用户...

    监听者模式练习(包括jdk api的实现和自定义实现)

    在Java中,JDK提供了内置的监听器接口和类来支持这种模式。本练习将深入探讨如何使用JDK API实现监听者模式以及自定义实现这一模式。 首先,我们要理解JDK API中的观察者模式实现。`java.util.Observable`类代表可...

    我收集的servlet中事件监听器机制we吧xml配置详解

    下面是如何在`web.xml`中配置一个`HttpSessionListener`的例子: ```xml ... <listener-class>com.example.HttpSessionEventListener</listener-class> ... ``` 这里,`...

    Java事件机制例子

    以"JavaEventDemo"为例,这个示例可能包含一个简单的Swing应用程序,它创建了一个窗口,窗口内有一个按钮。当用户点击按钮时,会触发一个动作事件。为了处理这个事件,我们需要创建一个实现了ActionListener接口的类...

    事件的好例子

    本示例"事件的好例子"着重于如何在JavaScript中处理鼠标事件,无需使用代理(proxy),这通常意味着我们将直接绑定事件监听器到目标元素。 首先,我们要了解JavaScript中的事件模型。在DOM(文档对象模型)中,有两...

    java中监听机制,以及观察者设计模式

    这样,当按钮被点击(事件发生)时,不仅会执行监听器中的动作,还可以更新其他依赖于这个事件的状态,符合观察者模式的定义。 在实际项目中,监听机制和观察者设计模式常用于构建响应式的用户界面、实现业务逻辑的...

    java事件和监听的区别

    当一个事件源想要通知多个监听器时,它会维护一个监听器列表,并在事件发生时逐一调用这些监听器的相应方法。这种机制使得事件源可以解耦于具体的监听器实现,从而提高了代码的灵活性和可扩展性。 #### 三、事件与...

    MVC设计模式的简单例子

    在这个简单的例子中,我们将探讨如何在Tomcat服务器上利用Servlet、JavaBean和JSP来实现一个基于MVC模式的应用。 **一、MVC模式的组件解析** 1. **Model(模型)**:模型层是应用程序的核心,负责处理业务逻辑和...

    spring事件的例子

    当你想要触发事件时,只需要创建一个事件实例并调用此方法即可。例如: ```java UserRegisteredEvent event = new UserRegisteredEvent(this, newUser); getApplicationContext().publishEvent(event); ``` 在这里...

    java事件例子

    Java事件模型主要基于观察者模式,其中事件源(通常是组件,如按钮、文本框等)是被观察的对象,而事件监听器则是观察者,负责处理由事件源触发的事件。Java AWT和Swing库提供了丰富的组件和事件类来支持这一机制。 ...

    jsp 写的 一个小例子

    【标题】"jsp 写的 一个小例子"揭示了这个压缩包内容是关于使用Java Server Pages(JSP)技术开发的一个Web应用程序实例。JSP是一种动态网页开发技术,它允许开发者在HTML或XML文档中嵌入Java代码,从而实现服务器端...

    在聊天室中用监听器.rar

    在本示例中,“在聊天室中用监听器.rar”可能包含了一个或多个文件,这些文件展示了如何在聊天室应用中实现监听器功能。监听器的主要作用是捕获特定事件,如用户发送的消息、加入聊天室、离开聊天室等,以便程序能够...

    具有命名组支持的成熟事件发射器.zip

    2. **命名组管理**:允许通过组名来组织和管理事件,可能有一个接口如`addListenerToGroup(eventName, groupName, listener)`,使得监听器可以指定加入到哪个组。 3. **分组触发**:可以一次性触发某个组内的所有...

    Observer例子

    Observer模式的核心概念是"发布-订阅"(Publish-Subscribe)或"监听器"(Listener)模式。它包括两个主要角色:主题(Subject)和观察者(Observer)。主题是被观察的对象,它可以有多个观察者。观察者则订阅主题,...

    gridview+事件监听

    在XML布局文件中,我们可以通过`<GridView>`标签来声明一个GridView,并设置其属性,如列数`android:numColumns`,间距`android:horizontalSpacing`和`android:verticalSpacing`等。 接下来,我们关注事件监听。...

    《深入浅出Node.js》:Node异步编程解决方案之事件发布-订阅模式.docx

    以下是一个简单的事件发布-订阅模式的例子: ```javascript const events = require('events'); const emitter = new events.EventEmitter(); // 订阅名为'event1'的事件,当触发时执行同步回调 emitter.on('event...

    事件经典例子

    例如,当用户点击一个按钮时,可以绑定一个事件监听器,执行相应的函数。以下是一个简单的HTML按钮点击事件的例子: ```html 点击我 document.getElementById('myButton').addEventListener('click', function() {...

    设计模式(包含5个设计模式)含源代码报告.rar

    装饰器模式可以在不改变原有对象结构的情况下,通过添加新的行为或属性来增强对象。 每个模式的实现都包含了类图,这有助于我们直观地理解类与类之间的关系和职责分配。源代码则让我们能够看到这些模式在实际项目中...

Global site tag (gtag.js) - Google Analytics