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

1.Event 事件系统

    博客分类:
  • GXT
阅读更多
要说GXT里面的事件Event,就必须先了解一下GWT提供的事件系统

GWT中基础的事件类是:com.google.gwt.user.client.Event
在这里GWT给我们提供了浏览器原生的20种左右的事件,每一个事件都用一个Int整数类型表示
如:
  /**
   * Fired when the user clicks on an element.
   */
  public static final int ONCLICK = 0x00001;


GWT只提供了原生的事件,实际GXT中需要很多的自定义事件,GXT是如何扩展事件系统的呢?

GXT中创建了一个:com.extjs.gxt.ui.client.event.EventType 类,通过创建这个类的实例来表示一种事件(对比GWT中是用int整数来表示一种事件)。GWT中通过int类型来区别不同的事件,而GXT的EventType则是通过比较内存地址来判断是否为不同的事件。

com.extjs.gxt.ui.client.event.Events 类列出了GXT提供的所有事件类型,截取片段代码如下:
/**
 * Defines the GXT event types.
 */
public class Events {

  /**
   * Activate event type.
   */
  public static final EventType Activate = new EventType();

  /**
   * Add event type.
   */
  public static final EventType Add = new EventType();

  /**
   * Adopt event type.
   */
  public static final EventType Adopt = new EventType();

因为这些事件类型是带有逻辑的自定义的事件,数量上远远大于浏览器的原生事件。目前GXT2.1的事件就达到145种,未来应该还会添加!

这样说来GXT与GWT采用了2套事件系统,会不会有冲突呢?
比如GWT捕获到一个Event.ONCLICK的单击事件,通知给GXT,因为这是一个int数据,而GXT识别的是EventType类型的事件,GXT如何来识别GWT的事件并转化为自己能够认识的EventType事件呢?

解决方法是GXT将GWT提供的原生事件与GXT中的事件进行了绑定。参考代码:
  private static Map<String, EventType> browserEvents = new FastMap<EventType>();

  static {
    browserEvents.put(String.valueOf(Event.ONBLUR), OnBlur);
    browserEvents.put(String.valueOf(Event.ONCHANGE), OnChange);
    browserEvents.put(String.valueOf(Event.ONCLICK), OnClick);
    browserEvents.put(String.valueOf(Event.ONCONTEXTMENU), OnContextMenu);
    browserEvents.put(String.valueOf(Event.ONDBLCLICK), OnDoubleClick);
    browserEvents.put(String.valueOf(Event.ONERROR), OnError);
    browserEvents.put(String.valueOf(Event.ONFOCUS), OnFocus);
    browserEvents.put(String.valueOf(Event.ONKEYDOWN), OnKeyDown);
    browserEvents.put(String.valueOf(Event.ONKEYPRESS), OnKeyPress);
    browserEvents.put(String.valueOf(Event.ONKEYUP), OnKeyUp);
    browserEvents.put(String.valueOf(Event.ONLOAD), OnLoad);
    browserEvents.put(String.valueOf(Event.ONLOSECAPTURE), OnLoseCapture);
    browserEvents.put(String.valueOf(Event.ONMOUSEDOWN), OnMouseDown);
    browserEvents.put(String.valueOf(Event.ONMOUSEUP), OnMouseUp);
    browserEvents.put(String.valueOf(Event.ONMOUSEOVER), OnMouseOver);
    browserEvents.put(String.valueOf(Event.ONMOUSEOUT), OnMouseOut);
    browserEvents.put(String.valueOf(Event.ONMOUSEMOVE), OnMouseMove);
    browserEvents.put(String.valueOf(Event.ONMOUSEWHEEL), OnMouseWheel);
    browserEvents.put(String.valueOf(Event.ONPASTE), OnPaste);
    browserEvents.put(String.valueOf(Event.ONSCROLL), OnScroll);

  }

browserEvents 这个map对象绑定了GWT事件与GXT的EventType事件
当GXT接收到GWT传递过来的一个int类型的事件时,GXT会调用:
  public static EventType lookupBrowserEvent(int browserEventType) {
    EventType type = browserEvents.get(String.valueOf(browserEventType));
    assert type != null;
    return type;
  }

方法来查找对应的EventType事件,找到后以自己的一套事件系统来传递和处理这个事件


分享到:
评论

相关推荐

    解决mysql failed to open table mysql.event

    - 检查`my.cnf`(或`my.ini`,取决于你的系统)配置文件,确保`event_scheduler`参数设置为`ON`,允许MySQL事件调度器运行。 - 修改配置后,需要重启MySQL服务使更改生效。 5. **数据目录**: - 确保MySQL的数据...

    jquery.event.drag-2.0.rar

    `jquery.event.drag-2.0.js`是该插件的主要实现文件,它扩展了jQuery的核心事件系统,为DOM元素添加了自定义的拖放事件处理。这些事件包括`dragstart`、`drag`、`dragend`等,它们分别对应拖放操作的开始、进行中和...

    Delegate.Event.ThreadDelegate.Event.Thread

    例如,在UI设计中,如果一个按钮被点击,系统会触发一个事件,开发者可以通过定义事件处理程序来响应这个事件。而线程则用于在后台执行任务,避免阻塞用户界面。线程之间的通信可以通过事件和委托来实现,使得多线程...

    前端项目-backbone.eventbinder.zip

    Backbone.js的核心特性之一是事件系统,它允许对象之间通过发布和订阅事件进行通信,而无需硬编码依赖。然而,在大型项目中,随着事件绑定的增多,维护这些事件可能会变得困难。Backbone.EventBinder 库就是为了应对...

    Manning.Event.Processing.in.Action.Jul.2010.rar

    1. **事件驱动架构**:书中介绍了事件驱动架构(EDA)的基本原理,包括事件源、事件处理器和事件消费者。EDA允许系统解耦,提高响应速度和可扩展性。 2. **事件模型**:讨论了如何定义和处理不同类型的事件,包括...

    Manning.Event.Processing.in.Action.Jun.2010.MEAP.rar

    1. **事件和事件处理基础**:介绍事件的基本概念,包括事件的类型(如业务事件、系统事件)、事件的生命周期以及事件处理模型(如发布/订阅、生产者/消费者模型)。 2. **事件源和事件中间件**:讨论产生事件的源头...

    eventlog_0.2.12.tar.gz

    Windows操作系统使用Event Viewer来记录事件日志,包括应用程序、安全、系统和设置日志。"eventlog"工具能够读取并解析这些日志文件,提供跨平台的查看和分析能力。这对于远程管理和多操作系统环境尤其有用,因为它...

    [数据库] Navicat for MySQL事件Event实现数据每日定期操作1

    【数据库】Navicat for MySQL事件(Event)是MySQL数据库中的一种功能,用于实现定期自动执行的任务,类似于操作系统中的计划任务。在上述情境中,Event主要应用于数据的日常管理,包括定时备份、数据清理以及状态更新...

    EventLog,输出到系统事件日志

    ### EventLog:输出到系统事件日志 #### 一、EventLog的概念与作用 EventLog是一种用于记录系统或应用程序运行过程中发生的事件的技术。通过EventLog,开发者能够将关键信息输出到系统的事件日志中,方便后续对...

    jQuery-1.9.1源码分析系列(十)事件系统之事件包装

    在jQuery的事件系统中,事件包装是一个核心机制,它允许jQuery对浏览器原生事件进行扩展和控制,以提供更强大的功能。在jQuery-1.9.1版本中,这一机制尤其重要,因为浏览器的原生事件对象是只读的,这限制了jQuery...

    go-event:Go-event是一个简单的事件系统

    Go-event是一个简单的事件系统。 取得包裹 $ go get -u github.com/AlexanderGrom/go-event 例子 e := event . New () e . On ( "my.event.name.1" , func () error { fmt . Println ( "Fire event" ) return nil...

    VB Event 事件演示程序

    事件处理过程是程序员编写的一段代码,用于定义当事件发生时系统应该如何响应。通过事件驱动编程,开发者可以专注于业务逻辑,而无需关心具体的操作细节。 项目包含的文件有: 1. Form2.frm:这是一个表单文件,...

    JavaFX2.x事件处理

    - **事件凸显(Event Bubbling)**:事件凸显则是从子节点向父节点方向传递事件的过程。 #### 四、事件处理方法 ##### 1. 使用事件过滤器 - **定义**:事件过滤器允许开发者在事件传递过程中拦截事件,并决定...

    C程序架构之事件调用机制 event

    6. **优先级和定时器**:高级的事件系统可能还会支持事件优先级,使得高优先级的事件能更快得到处理。定时器可以用来安排未来某个时间点触发的事件。 在嵌入式系统中,这样的事件驱动机制特别重要,因为资源有限,...

    C#写入事件查看器、eventLog控件使用DEMO

    在Windows操作系统中,事件查看器(Event Viewer)是一个强大的工具,用于查看系统、应用程序和安全日志中的事件。开发者可以通过编程方式将应用日志写入事件查看器,以供后期分析和故障排查。C#提供了方便的API来...

    scan_event.rar_event

    【标题】"scan_event.rar_event" 是一个与事件日志相关的编程资源压缩包,它包含了一系列用于查看和处理系统事件的源代码。该压缩包旨在帮助开发者理解和实现对Windows操作系统事件日志的浏览功能。 【描述】中提到...

    SDL_Event.rar_event_sdl_event_sdl点击事件

    `SDL_Event`是一个联合体(union),包含了各种可能发生的事件类型,例如键盘事件、鼠标事件、窗口事件等。当你调用`SDL_PollEvent`或`SDL_PeepEvents`函数时,SDL会将接收到的事件存储在这个结构体中。例如: ```...

    ircomm_event.rar_event

    在IT行业中,事件(event)是程序设计中的一个重要概念,特别是在多任务和实时系统中。"ircomm_event.rar_event"这个标题暗示我们正在处理一个与红外通信(IrDA,Infrared Data Association)相关的事件机制。IrDA是一...

    mysql Event Scheduler: Failed to open table mysql.event

    MySQL中的事件调度器(Event Scheduler)是一个用于在指定时间执行特定任务的功能,它可以周期性地运行SQL语句或语句块,类似于触发器。然而,当事件调度器无法打开mysql.event表时,可能会遇到错误“Event ...

    edss1.rar_Event Space

    标题“edss1.rar_Event Space”暗示我们正在处理一个与事件空间相关的软件开发项目,可能是用于记录和管理FSM(有限状态机)的事件。描述提到“complete the FSM move state event descriptions to a user space ...

Global site tag (gtag.js) - Google Analytics