`

Event 事件系统(转的自己看)

阅读更多

1.Event 事件系统

文章分类:Web前端 要说GXT里面的事件Event,就必须先了解一下GWT提供的事件系统

GWT中基础的事件类是:com.google.gwt.user.client.Event
在这里GWT给我们提供了浏览器原生的20种左右的事件,每一个事件都用一个Int整数类型表示
如:

Java代码
  1. /**  
  2.  * Fired when the user clicks on an element.  
  3.  */   
  4. public   static   final   int  ONCLICK =  0x00001 ;  
  /**
   * 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提供的所有事件类型,截取片段代码如下:

Java代码
  1. /**  
  2.  * Defines the GXT event types.  
  3.  */   
  4. public   class  Events {  
  5.   
  6.   /**  
  7.    * Activate event type.  
  8.    */   
  9.   public   static   final  EventType Activate =  new  EventType();  
  10.   
  11.   /**  
  12.    * Add event type.  
  13.    */   
  14.   public   static   final  EventType Add =  new  EventType();  
  15.   
  16.   /**  
  17.    * Adopt event type.  
  18.    */   
  19.   public   static   final  EventType Adopt =  new  EventType();  
/**
 * 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中的事件进行了绑定。参考代码:

Java代码
  1. private   static  Map<String, EventType> browserEvents =  new  FastMap<EventType>();  
  2.   
  3. static  {  
  4.   browserEvents.put(String.valueOf(Event.ONBLUR), OnBlur);  
  5.   browserEvents.put(String.valueOf(Event.ONCHANGE), OnChange);  
  6.   browserEvents.put(String.valueOf(Event.ONCLICK), OnClick);  
  7.   browserEvents.put(String.valueOf(Event.ONCONTEXTMENU), OnContextMenu);  
  8.   browserEvents.put(String.valueOf(Event.ONDBLCLICK), OnDoubleClick);  
  9.   browserEvents.put(String.valueOf(Event.ONERROR), OnError);  
  10.   browserEvents.put(String.valueOf(Event.ONFOCUS), OnFocus);  
  11.   browserEvents.put(String.valueOf(Event.ONKEYDOWN), OnKeyDown);  
  12.   browserEvents.put(String.valueOf(Event.ONKEYPRESS), OnKeyPress);  
  13.   browserEvents.put(String.valueOf(Event.ONKEYUP), OnKeyUp);  
  14.   browserEvents.put(String.valueOf(Event.ONLOAD), OnLoad);  
  15.   browserEvents.put(String.valueOf(Event.ONLOSECAPTURE), OnLoseCapture);  
  16.   browserEvents.put(String.valueOf(Event.ONMOUSEDOWN), OnMouseDown);  
  17.   browserEvents.put(String.valueOf(Event.ONMOUSEUP), OnMouseUp);  
  18.   browserEvents.put(String.valueOf(Event.ONMOUSEOVER), OnMouseOver);  
  19.   browserEvents.put(String.valueOf(Event.ONMOUSEOUT), OnMouseOut);  
  20.   browserEvents.put(String.valueOf(Event.ONMOUSEMOVE), OnMouseMove);  
  21.   browserEvents.put(String.valueOf(Event.ONMOUSEWHEEL), OnMouseWheel);  
  22.   browserEvents.put(String.valueOf(Event.ONPASTE), OnPaste);  
  23.   browserEvents.put(String.valueOf(Event.ONSCROLL), OnScroll);  
  24.   
  25. }  
  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会调用:

Java代码
  1. public   static  EventType lookupBrowserEvent( int  browserEventType) {  
  2.   EventType type = browserEvents.get(String.valueOf(browserEventType));  
  3.   assert  type !=  null ;  
  4.   return  type;  
  5. }  
  public static EventType lookupBrowserEvent(int browserEventType) {
    EventType type = browserEvents.get(String.valueOf(browserEventType));
    assert type != null;
    return type;
  }


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

分享到:
评论

相关推荐

    Event事件总汇资源下载 event事件大全!请支持啊

    "Event事件总汇资源下载" 提供了一个全面了解和学习事件处理的平台。 事件通常在用户与应用程序交互时触发,例如点击按钮、滚动页面或输入数据等。这些动作由操作系统或用户界面框架捕获并转换为事件对象,然后通过...

    ircomm_event.rar_event

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

    event-B入门基础手册

    - **咖啡俱乐部(Coffee Club)案例**:本书通过一个具体的例子——咖啡俱乐部系统,详细介绍了如何使用Event-B进行系统建模与设计。该案例涉及到了上下文的定义、机器的构建、事件的描述以及细化过程等内容。 - **...

    discrete event systems

    离散事件系统(Discrete Event Systems,DES)是指在时间上具有离散特征的系统,其中事件的发生是瞬时的,即不占据时间区间,但会导致系统状态的转变。在工业控制系统、通信网络、交通管理等领域,离散事件系统的...

    seq_midi_event.rar_event

    在嵌入式Linux系统中,MIDI(Musical Instrument Digital Interface)字节与序列事件编码器是音频处理领域的一个重要组件。"seq_midi_event.rar_event"标题中的"rar_event"可能指的是一个压缩包,其中包含了与MIDI...

    Event-Driven Programming:

    教程强调了几个核心概念,比如事件队列、处理器设计模式(Handler Design Pattern)、无头处理器模式(Headless Handlers Pattern)、扩展处理器模式(Extended Handlers Pattern)、事件对象(Event Objects)、...

    Event-B Language

    通过定义不同的机器(如红绿灯控制器),以及每个机器的事件(如切换信号),可以构建一个完整的系统模型,并利用 Event-B 的数学证明技术来验证其行为是否符合预期。 #### 五、结论 Event-B 作为一种强大的形式化...

    op_parse_event.rar_event

    在Linux API驱动程序中,事件解析(Event Parsing)是一个关键环节,它涉及到系统与应用程序之间的交互,特别是当涉及内核事件跟踪和用户空间分析时。`op_parse_event.rar_event`这个压缩包包含了实现这一功能的源...

    广州蓄能水电厂Eventlog信息智能分析系统研究与应用.pdf

    事件记录系统(Eventlog系统)在其中扮演了关键角色,它能实时跟踪并记录设备的动作和状态信息,对于故障排查和状态监测起到决定性作用。 文章提到,Eventlog系统能够区分不同级别的报警信息,通过颜色标识,但仅...

    Event Detection in Twitter

    通过该系统,研究团队成功地识别出了与选举相关的各种事件,展示了EDCoW在处理大规模社交媒体数据方面的强大能力。 #### 结论与展望 总体而言,EDCoW提供了一种新颖且有效的方法来应对Twitter上事件检测的挑战。它...

    matlab-simulink-事件触发控制仿真

    在MATLAB Simulink环境中,事件触发控制是一种高级的控制策略,它允许系统仅在特定事件发生时执行控制算法,而不是按照固定的时间步长。这种控制方式可以显著提高效率,减少计算负担,同时还能实现精确的控制效果。...

    Event Procerssing in action

    - **事件的概念**:首先定义了什么是事件,以及为什么事件处理对于现代软件系统至关重要。 - **事件处理的重要性**:讨论了事件驱动架构的优势,包括响应性、灵活性以及可扩展性等方面。 - **事件处理的应用场景**:...

    hci_event.rar_event

    总的来说,`hci_event.c`是理解Linux系统下蓝牙协议栈如何处理底层事件的关键。它展示了BlueZ如何将硬件的原始事件转换为上层应用程序可理解和操作的抽象,使得开发者能够更便捷地利用蓝牙功能。通过对这个文件的...

    keybd_event()和mouse_event().rar

    在Windows API中,`keybd_event()`和`mouse_event()`是两个重要的函数,它们分别用于模拟键盘事件和鼠标事件。这两个函数在开发自动化测试、模拟用户操作或游戏编程等场景中非常有用。让我们深入探讨一下这两个函数...

    event tree analysis

    事件树分析(Event Tree Analysis,ETA)是一种系统安全分析方法,用于评估复杂系统中可能出现的故障序列及其导致的后果。这种技术在核能、石油、化工、航空航天等高风险行业中广泛应用,以识别潜在事故场景并制定...

    Event_Logger-8.1.rar_event

    "event"标签进一步证实了这一点,这通常指的是系统或应用程序中发生的特定事件、错误、警告或信息的日志记录。 在描述中提到的"GPS Source-windows CE",表明这个Event Logger可能与GPS数据源有关,特别设计用于...

    Event-SendMessage:Unity事件分发机制,实现事件分发中心

    然而,Unity还提供了其他事件系统,如UnityEvent和UnityEventBase,它们是Unity Inspector支持的,可以直接在Inspector中添加、编辑和删除事件处理函数,非常适合与UI组件配合使用。这些类位于`UnityEngine.UI`命名...

Global site tag (gtag.js) - Google Analytics