版主
  
- 积分
- 679
- 金钱
- 679
- 注册时间
- 2013-9-23
- 在线时间
- 95 小时
|
所谓事件驱动,简单来说就是当你触发或点击某个按键的时候,程序会执行相关的函数。整个事件驱动的核心内容就是如何生成事件,并且如何处理事件。在UOL中,整个事件机制是基于操作系统的线程,通过不停的查询事件列表来决定是否处理事件。本章通过设计一些简单的GUI控件来介绍如何实现事件驱动这个机制。
首先我们来看一下button这个控件。如上图所示,在这个例子中每一个button都是一个独立的对象。每个button对象中都由一个方法叫做:
addButtionAction(Listener lis, int type)
这个方法用来把当前的button对象和相关的Listener添加到一个叫做ButtonActionListener的对象中。
其中ButtonActionListener是用来创建一个线程并查询button事件列表。而Listener模块则是这个事件处理的核心内容。如下是Listener的代码:
public module Listener
{
public abstract void handleEvent(EventSource e);
}
任何一个类添加了Listener这个模块后,必须实现handleEvent这个方法。如果我们创建了一个类叫做TestButtonAction,当这个类添加了Listener之后,我们可以通过实现handleEvent这个方法来设计我们想要的button触发后的动作。
由于代码量比较大,所以这里就不贴代码了。测试代码和最新版本的UOL(1.0.2)开发包都在下面的帖子中:
http://www.openedv.com/posts/list/32384.htm
此次虚拟机做了一些相应修改。sd卡中的执行程序会直接加载到flash rom中运行,而不是在ram中。如果sd卡没有插入,虚拟机则直接启动上次加载的执行文件。
后续会推出更多了GUI空间,包括窗口都一系列的应用。 |
|