`
yonglin4605
  • 浏览: 187101 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

2.Listener 监听器系统

    博客分类:
  • GXT
阅读更多
GXT中的Listener采用观察者模式
因此在顶层就有一个接口com.extjs.gxt.ui.client.event.Observable,代表一个观察者
展示一下部分代码:
public interface Observable {

  public void addListener(EventType eventType, Listener<? extends BaseEvent> listener);

  public boolean fireEvent(EventType eventType, BaseEvent be);

  public List<Listener<? extends BaseEvent>> getListeners(EventType eventType);
  
  public boolean hasListeners();
  
  public boolean hasListeners(EventType eventType);

  public void removeListener(EventType eventType, Listener<? extends BaseEvent> listener);
}


BaseObservable 类对这个接口进行了实现
我们截取部分重要的代码来分析一下:
public class BaseObservable implements Observable {
  //是否开启事件触发,如果为false,则不处理所有的触发事件
  private boolean firesEvents = true;
  //此对象的所有监听器
  private Map<String, List<Listener<BaseEvent>>> listeners;
  //是否在事件触发状态
  private boolean activeEvent;
  //触发事件  特别注意此方法返回类型!
  public boolean fireEvent(EventType eventType, BaseEvent be) {
    if (firesEvents && listeners != null) {
      activeEvent = true;
      be.setType(eventType);

      List<Listener<BaseEvent>> list = listeners.get(getKey(eventType));
      if (list != null) {
        List<Listener<BaseEvent>> copy = new ArrayList<Listener<BaseEvent>>(list);
        for (Listener<BaseEvent> l : copy) {
          callListener(l, be);//① 此处可能会取消事件
        }
      }
      activeEvent = false;
      return !be.isCancelled();//② 返回类型表示是否需要取消事件
    }
    return true;
  }
}

fireEvent方法用来触发事件,判断自身的listeners是否有在监听eventType事件,如果有,则让该listener处理此事件.
在处理之前设置activeEvent=true,表示正在处理,处理结束后设置activeEvent=false,表示处理结束
当处理结束时返回的是:!be.isCancelled()
表示此事件是否需要取消。
为什么会有这个设计呢?
因为当listener①在处理这个事件时,它想要取消这个事件,中断后续的处理。那么他可以设置be.setCancelled(true);
此时返回的② !be.isCancelled() 为false
外部调用fireEvent方法的程序得到了一个false的返回值,就知道事件被取消了,不会继续调用下一步的处理。
分享到:
评论
1 楼 litianqwe 2013-09-05  
楼主 我现在有个问题 那我现在用GXT如果想对某一行增加一个双击事件 我该怎么写我的代码啊!因为现在只有addSelecttion这个方法但是里面需要传入事件类型的参数

相关推荐

    10.Listener.doc

    在 `web.xml` 配置文件中,我们需要通过 `&lt;listener&gt;` 元素来注册我们的监听器,指定监听器类的全限定名。在这个例子中,`&lt;listener-class&gt;` 是 `com.anllin.listener.MyServletContextListener`。 2. **...

    Listener监听器1

    Listener监听器1 Listener监听器是一种特殊的类,用于监听 web 应用程序中的 ServletContext、HttpSession、ServletRequest 等域对象的创建和销毁事件,以及监听这些域对象中的属性发生修改的事件。Listener监听器...

    SpringBoot整合Listener的两种方式.docx

    `ServletListenerRegistrationBean`是Spring框架提供的一个工具类,用于注册监听器。 ```java @SpringBootApplication public class App2 { public static void main(String[] args) { SpringApplication.run...

    JavaWeb开发技术-Listener监听器.pptx

    JavaWeb开发技术中的Listener监听器是Java企业级应用开发中的重要组成部分,主要用于监听应用程序中发生的特定事件,并在事件发生时执行相应的处理逻辑。监听器在JavaWeb开发中扮演着关键角色,它们允许开发者对Web...

    STRUTS:listener监听器

    ### STRUTS:Listener监听器详解 #### 一、引言 在Java Web开发中,监听器(Listener)是十分重要的组成部分,它们主要用于监听特定事件的发生,并执行相应的处理逻辑。Struts框架作为早期流行的MVC架构之一,充分...

    配置ORACLE的listener.ora、tnsnames.ora

    `listener.ora`文件是Oracle监听器的配置文件,它定义了监听器的名称、监听的端口以及服务名等信息。当客户端尝试连接到Oracle数据库时,监听器会接收请求,并根据配置转发到相应的数据库实例。以下是一些关于`...

    listener监听器demo

    标题"listener监听器demo"和描述"listener监听器小例子"暗示我们将探讨的是一个关于`Listener`的示例代码。 首先,让我们从Java GUI编程的角度来看`Listener`。在Swing或AWT中,我们经常使用各种类型的`Listener`,...

    Oracle_LISTENER监听文件参数详

    2. Start listener:启动指定的监听器。 3. Status listener:显示指定监听器的状态。 4. Stop listener:关闭指定的监听器。 5. Trace:打开监听器的跟踪特性。 6. Version:显示 Oracle Net 软件与协议适配器...

    myListenerWeb.zip 监听器Listener解析与实例

    监听器Listener解析与实例监听器-就是一个实现待定接口的普通Java程序,此程序专门用于监听另外一个类的方法调用。 这是使用观察者模式的。什么是观察者模式: 定义对象间一对多的依赖关系,当一个对象的状态发生...

    RAC listener.ora详解.docx

    Oracle RAC 监听器配置文件 listener.ora 详解 Oracle RAC 监听器配置文件 listener.ora 是一个核心配置文件,用于配置 Oracle Net Listener 的参数。本文将详细介绍 listener.ora 文件的配置参数、协议地址参数、...

    VersionOne.Integration.TFS.Listener:用于集成的VersionOne.Integration.TFS.Listener组件

    该组件作为一个监听器运行,持续监控TFS中的变化,如工作项的创建、更新或删除,以及源代码的提交等。一旦检测到这些事件,它就会通过API接口将这些信息同步到VersionOne系统中。这种实时同步确保了在多团队协作环境...

    java_listener监听器教程及实例.pdf

    java_listener监听器教程及实例.pdf

    JAVALISTENER监听器教程及实例借鉴.pdf

    JAVALISTENER监听器教程及实例借鉴.pdf

    Oracle 监听器 Listener资料.docx

    Oracle 监听器 Listener 资料 Oracle 监听器 Listener 是一个重要的数据库服务器组件,在整个 Oracle 体系结构中,扮演着重要的作用。它负责管理 Oracle 数据库和客户端之间的通讯,它在一个特定的网卡端口(默认是...

    Spring Boot的listener(监听器)简单使用实例详解

    "Spring Boot的listener(监听器)简单使用实例详解" 在Spring Boot中,listener(监听器)是一种非常重要的组件,它可以帮助我们在应用程序启动和停止时执行一些特定的任务。今天,我们将详细介绍Spring Boot的...

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

    2. 事件监听器的实现应该遵循单一职责原则,避免将多个事件处理方法放在同一个事件监听器中。 3. 事件源应该提供注册事件监听器的方法,以便事件监听器可以被正确地注册。 Java监听器是Java编程中的一种重要设计...

    listener和filter 监听器和过滤器的介绍以及简单使用(csdn)————程序.pdf

    在Java Web开发中,监听器(Listener)和过滤器(Filter)是两种非常重要的组件,它们分别承担着不同的职责。监听器主要用于监听应用程序中的特定事件,而过滤器则用于在请求处理之前和之后对请求和响应进行拦截,...

    Oracle数据库监听器(LISTENER)和本地服务名(Tnsname)配置.docx

    Oracle 数据库监听器(LISTENER)和本地服务名(Tnsname)配置 本文主要介绍 Oracle 数据库监听器(LISTENER)和本地服务名(Tnsname)的配置,旨在帮助读者了解 Oracle 网络连接配置的主要组件和配置方法。 一、监听器...

Global site tag (gtag.js) - Google Analytics