要说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事件,找到后以自己的一套事件系统来传递和处理这个事件
分享到:
相关推荐
- 检查`my.cnf`(或`my.ini`,取决于你的系统)配置文件,确保`event_scheduler`参数设置为`ON`,允许MySQL事件调度器运行。 - 修改配置后,需要重启MySQL服务使更改生效。 5. **数据目录**: - 确保MySQL的数据...
`jquery.event.drag-2.0.js`是该插件的主要实现文件,它扩展了jQuery的核心事件系统,为DOM元素添加了自定义的拖放事件处理。这些事件包括`dragstart`、`drag`、`dragend`等,它们分别对应拖放操作的开始、进行中和...
例如,在UI设计中,如果一个按钮被点击,系统会触发一个事件,开发者可以通过定义事件处理程序来响应这个事件。而线程则用于在后台执行任务,避免阻塞用户界面。线程之间的通信可以通过事件和委托来实现,使得多线程...
Backbone.js的核心特性之一是事件系统,它允许对象之间通过发布和订阅事件进行通信,而无需硬编码依赖。然而,在大型项目中,随着事件绑定的增多,维护这些事件可能会变得困难。Backbone.EventBinder 库就是为了应对...
1. **事件驱动架构**:书中介绍了事件驱动架构(EDA)的基本原理,包括事件源、事件处理器和事件消费者。EDA允许系统解耦,提高响应速度和可扩展性。 2. **事件模型**:讨论了如何定义和处理不同类型的事件,包括...
1. **事件和事件处理基础**:介绍事件的基本概念,包括事件的类型(如业务事件、系统事件)、事件的生命周期以及事件处理模型(如发布/订阅、生产者/消费者模型)。 2. **事件源和事件中间件**:讨论产生事件的源头...
Windows操作系统使用Event Viewer来记录事件日志,包括应用程序、安全、系统和设置日志。"eventlog"工具能够读取并解析这些日志文件,提供跨平台的查看和分析能力。这对于远程管理和多操作系统环境尤其有用,因为它...
在jQuery的事件系统中,事件包装是一个核心机制,它允许jQuery对浏览器原生事件进行扩展和控制,以提供更强大的功能。在jQuery-1.9.1版本中,这一机制尤其重要,因为浏览器的原生事件对象是只读的,这限制了jQuery...
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...
### EventLog:输出到系统事件日志 #### 一、EventLog的概念与作用 EventLog是一种用于记录系统或应用程序运行过程中发生的事件的技术。通过EventLog,开发者能够将关键信息输出到系统的事件日志中,方便后续对...
事件处理过程是程序员编写的一段代码,用于定义当事件发生时系统应该如何响应。通过事件驱动编程,开发者可以专注于业务逻辑,而无需关心具体的操作细节。 项目包含的文件有: 1. Form2.frm:这是一个表单文件,...
- **事件凸显(Event Bubbling)**:事件凸显则是从子节点向父节点方向传递事件的过程。 #### 四、事件处理方法 ##### 1. 使用事件过滤器 - **定义**:事件过滤器允许开发者在事件传递过程中拦截事件,并决定...
6. **优先级和定时器**:高级的事件系统可能还会支持事件优先级,使得高优先级的事件能更快得到处理。定时器可以用来安排未来某个时间点触发的事件。 在嵌入式系统中,这样的事件驱动机制特别重要,因为资源有限,...
在Windows操作系统中,事件查看器(Event Viewer)是一个强大的工具,用于查看系统、应用程序和安全日志中的事件。开发者可以通过编程方式将应用日志写入事件查看器,以供后期分析和故障排查。C#提供了方便的API来...
【标题】"scan_event.rar_event" 是一个与事件日志相关的编程资源压缩包,它包含了一系列用于查看和处理系统事件的源代码。该压缩包旨在帮助开发者理解和实现对Windows操作系统事件日志的浏览功能。 【描述】中提到...
`SDL_Event`是一个联合体(union),包含了各种可能发生的事件类型,例如键盘事件、鼠标事件、窗口事件等。当你调用`SDL_PollEvent`或`SDL_PeepEvents`函数时,SDL会将接收到的事件存储在这个结构体中。例如: ```...
在IT行业中,事件(event)是程序设计中的一个重要概念,特别是在多任务和实时系统中。"ircomm_event.rar_event"这个标题暗示我们正在处理一个与红外通信(IrDA,Infrared Data Association)相关的事件机制。IrDA是一...
MySQL中的事件调度器(Event Scheduler)是一个用于在指定时间执行特定任务的功能,它可以周期性地运行SQL语句或语句块,类似于触发器。然而,当事件调度器无法打开mysql.event表时,可能会遇到错误“Event ...
标题“edss1.rar_Event Space”暗示我们正在处理一个与事件空间相关的软件开发项目,可能是用于记录和管理FSM(有限状态机)的事件。描述提到“complete the FSM move state event descriptions to a user space ...
事件处理的核心在于`Event`对象,这个对象包含了与事件相关的信息,如事件类型、触发事件的元素等。下面我们将深入探讨`Event`对象的关键属性和方法,以及它们在JavaScript中的应用。 ### 1. `Event`对象的基础属性...