没有合适的资源?快使用搜索试试~ 我知道了~
用Java事件处理机制实现录制回放功能
需积分: 20 18 下载量 184 浏览量
2010-09-24
11:14:06
上传
评论
收藏 53KB DOC 举报
温馨提示
试读
13页
用Java事件处理机制实现录制回放功能用Java事件处理机制实现录制回放功能用Java事件处理机制实现录制回放功能
资源推荐
资源详情
资源评论
阅读提示:目前在一些 Java 应用程序的 GUI 测试工具,可以提供捕获用户操作的能力并
在代码被修改之后能够自动回放用户的操作。文章将分析 Java 的事件处理模型及其原理,
介绍了基于事件源识别的捕获/回放所需要了解的关键技术并给出了两种实现方式。
目前在一些 Java 应用程序的 GUI 测试工具,可以提供捕获用户操作的能力并在代码被修
改之后能够自动回放用户的操作。文章将分析 Java 的事件处理模型及其原理,介绍了基于
事件源识别的捕获/回放所需要了解的关键技术并给出了两种实现方式。
1、 Java 事件介绍
1.1 什么是事件
首先我们来回答"什么是事件"这一基本问题。其实事件本身就是一个抽象的概念,他是表
现另一对象状态变化的对象。在面向对象的程序设计中,事件消息是对象间通信的基本方
式。
在图形用户界面程序中,GUI 组件对象根据用户的交互产生各种类型的事件消息,这些事
件消息由应用程序的事件处理代码捕获,在进行相应的处理后驱动消息响 应对象做出反应。
我们在 GUI 上进行叫化操作的时候,在点击某个可响应的对象时如,按钮,菜单,我们都
会期待某个事件的发生。
其实围绕 GUI 的所有活动都会发生事件,但 Java 事件处理机制却可以让您挑选出您需要
处理的事件。事件在 Java 中和其他对象基本是一样的,但有一点不同的是,事件是由系统
自动生成自动传递到适当的事件处理程序。
1.2Java 事件处理的演变
当 Java 的开发者开始解决用 Java 创建应用程序这一问题时,他们就认识到 Java 事件模型
的必要性。下面对 Java 事件处理的发展做简要的概括。
在 JDK1.0 的版本采用用的事件模型,提供了基本的事件处理功能。这是一种包容模型,
所有事件都封装在单一的类 Event 中,所有事件对象都由单一的方法 handleEvent 来处
理,这些定义都在 Component 类中。
为此,只有 Component 类的子类才能充当事件处理程序,事件处理传递到组件层次结构,
如果目标组件不能完全处理事件,事件被传递到目标组件的容器。
JDK1.1 是编程界的一次革命,修正了前面版本的一些缺陷,同时增加了一些重要的新功能
如,RMI、JNI、JDBC、JavaBean。在事件模型上 基本框架完全重写,并从 Java1.0 模
型迁移到委托事件模型,在委托模型中事件源生成事件,然后事件处理委托给另一段代码。
从 JDK1.2 开始,引入了 Swing 包事件处理模型功能更强大,更加可定制 GUI 组件与他们
相关联的支持类。在后面的版本基本保持了整个事件模型,但加 入了一些附加事件类和接
口。在 1.3 版本开始引入 Rebot 类,它能模拟鼠标和键盘事件,并用于自动化测试、自动
运行演示、以及其他要求鼠标和键盘控制的 应用程序。
我们把 JDK1.0 事件处理模型成为 Java1.0 事件模型,而从 jdk1.1 后的版本事件处理模型
称为 Java 2 事件处理模型。
2、Java 2 事件处理模型
在 Java1.0 事件处理模型中事件处理是以如下方法执行的。deliverEvent()用于决定事
件的目标,目标是处理事件的组件或容器,此过程开始于 GUI 层的最外部而向内运作。
当按一个 button 时,如果检测到是该按钮激发的事件,该按钮会访问它的
deliverEvent()方法,这一操作由系统完成。一旦识别目标组件,正 确事件类型发往组件
的 postEvent()方法,该方法依次把事件送到 handleEvent()方法并且等待方法的返回值。
"true"表明事件完全处理,"false"将使 postEvent()方法联系目标容器,希望完成事件处
理。
下面给一个实例:
import java.applet.*;
import java.awt.*;
public class Button1Applet
extends Applet{
public void init()
{
add(new Button("Red"));
add(new Button("Blue"));
}
public boolean action
(Enent evt,Object whatAction)
{
if( !( evt.target
instanceof Button))return false;
String buttonlabel=
(String)whatAction;
if(buttonlabel=="Red")
setBackground(Color.red);
if(buttonlabel==" Blue")
setBackground(Color.blue);
repaint();
return true;
}
}
在 Java2 处理事件时,没有采用 dispatchEvent()-postEvent()-handleEvent()方式,
采用了监听器类,每个事件类都有相关联的监听器接口。事件从事件源到监听者的传递是
通过对目标监听者对象的 Java 方法调用进行的。
对每个明确的事件的发生,都相应地定义一个明确的 Java 方法。这些方法都集中定义在事
件监听者(EventListener)接口中,这个接口要继承 java.util.EventListener。 实现
了事件监听者接口中一些或全部方法的类就是事件监听者。
伴随着事件的发生,相应的状态通常都封装在事件状态对象中,该对象必须继承自
java.util.EventObject。事件状态对象作为单参传递给应 响应该事件的监听者方法中。
发出某种特定事件的事件源的标识是:遵从规定的设计格式为事件监听者定义注册方法,
并接受对指定事件监听者接口实例的引用。
有时,事件监听者不能直接实现事件监听者接口,或者还有其它的额外动作时,就要在一
个源与其它一个或多个监听者之间插入一个事件适配器类的实例,来建立它们之间的联系。
我们来看下面一个简单的实例:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class SimpleExample extends JFrame
{
JButton jButton1 = new JButton();
public SimpleExample()
{
try {
jbInit();
}
catch(Exception e)
{
e.printStackTrace();
}
}
public static void
main(String[] args)
{
SimpleExample simpleExample
= new SimpleExample();
}
private void jbInit()
throws Exception {
jButton1.setText
("jButton1");
jButton1.addActionListener(new
SimpleExample_jButton1_actionAdapter(this));
jButton1.addActionListener(new
SimpleExample_jButton1_actionAdapter(this));
this.getContentPane().add
(jButton1, BorderLayout.CENTER);
this.setVisible(true);
}
void jButton1_actionPerformed
(ActionEvent e)
{
System.exit(0);
}
}
class SimpleExample_jButton1_
actionAdapter implements
java.awt.event.ActionListener
{
SimpleExample adaptee;
SimpleExample_jButton1_actionAdapter
剩余12页未读,继续阅读
资源评论
wu199122
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功