首页 | 互联网 | IT动态 | IT培训 | Cisco | Windows | Linux | Java | .Net | Oracle | 软件测试 | C/C++ | 嵌入式开发 | 存储世界 | 服务器
网络设备 | IDC | 安全 | 求职招聘 | 数字网校 | 网页设计 | 平面设计 | 技术专题 | 电子书下载 | 教学视频 | 源码下载 | 搜索 | 博客 | 论坛
首页 | JAVA | C# | VB | VB.NET | C/C++ | delphi | 工程管理 | 其他语言 | 论坛
各大城市软件开发培训、软件人才免费咨询热线:400-700-5807
 您现在的位置: 中国IT实验室 >> 桌面开发 >> JAVA >> 正文
用Java事件处理机制实现录制回放功能
来源:ChinaItLab 作者:佚名 时间:2007-5-30

  事件最初由事件源产生,事件源可以是GUI组件Java Bean或由生成事件能力的对象,在GUI组件情况下,事件源或者是组件的同位体(对于Abstract Window Toolkit[awt]GUI组件来说)或组件本身(对于Swing组件来说)。事件生成后放在系统事件队列内部。现在事件处于事件分发线程的控制下。事件在队列中等待处理,然后事件从事件队列中选出,送到dispatchEvent()方法,dispatchEvent()方法调用processEvent()方法并将事件的一个引用传递给processEvent()方法。此刻,系统会查看是否有送出事件的位置,如果没有这种事件类型相应的已经注册的监听器,或者如果没有任何组件受到激活来接收事件类型,事件就被抛弃。当然上图显示的是AWTEvent类的子类的生命周期。dispatchEvent()方法和processEvent()方法把AWTEvent作为一个参数。但对,javax.swing.event并不是AWTEvent子类,而是从EventObject直接继承过来,生成这些事件的对象也会定义fireEvent()方法,此方法将事件送到包含在对象监听器列表内的那种类型的任何监听器。

  3.2 Java事件捕获

  从上面的分析我们知道,任何事件产生到dispatchEvent()方法分发方法前,所有的事件都是存放在系统事件的队列中,而且所有的事件都由dispatchEvent()方法来分派。所以只要能重载dispatchEvent()方法就可以获取系统的所有事件,包括用户输入事件。一般来说,系统事件队列的操作对用户来说是可以控制。它在后台自动完成所要完成的事情,使用EventQueue类可以查看甚至操纵系统事件队列。

  Java提供了EventQueue类来访问甚至操纵系统事件队列。EventQueue类中封装了对系统事件队列的各种操作,除dispatchEvent()方法外,其中最关键的是提供了push()方法,允许用特定的EventQueue来代替当前的EventQueue.只要从EventQueue类中派生一个新类,然后通过push()方法用派生类来代替当前的EventQueue类即可。这样,所有的系统事件都会转发到派生EventQueue类。然后,再在派生类中重载dispatchEvent()方法就可以截获所有的系统事件,包括用户输入事件。下面一段代码给出一个操纵EventQueue的实例:


 
import java.awt.*; 
import java.awt.event.*; 

public class GenerateEventQueue extends Frame implements ActionListener{ 
  Button button1 = new Button(); 
  TextField textField1 = new TextField(); 

  public GenerateEventQueue() { 
    try { 
      jbInit(); 
    } 
    catch(Exception e) { 
      e.printStackTrace(); 
    } 
  } 
  public static void main(String[] args) { 
    GenerateEventQueue generateEventQueue = new GenerateEventQueue(); 
  } 
  private void jbInit() throws Exception { 
    button1.setLabel("button1"); 
    button1.addActionListener(this) ; 
    textField1.setText("textField1"); 

    this.add(button1, BorderLayout.SOUTH); 
    this.add(textField1, BorderLayout.CENTER); 
    EventQueue eq=getToolkit().getSystemEventQueue() ; 
    eq.postEvent(new ActionEvent(button1,ActionEvent.ACTION_PERFORMED,"test" )) ; 
    addWindowListener(new WinListener()); 
    setBounds(100,100,300,200); 
    setVisible(true); 
  } 

  public void actionPerformed(ActionEvent e) { 
    textField1.setText("event is :"+e.getActionCommand()) ; 
  } 

} 

class WinListener extends WindowAdapter{ 
  public void windowClosing(WindowEvent we){ 
    System.exit(0) ; 
  } 
} 

  运行结果如下图所示:

  在文本域中首先出现的是"event is :test",这是因为首先得到处理的是EventQueue对象发送到系统事件队列上的ActionEvent。

上一页  [1] [2] [3] [4] [5] [6] 下一页

【责编:Youping】
中国IT教育热线咨询
相关文章
框架:J2EE WEB应用架构分析…
Java SE 6.0实现高质量桌面集成开发…
浅谈Java中利用JCOM实现仿Excel编程
基于Java的界面布局DSL的设计与实现
Java开发中的事件驱动模型实例详解
Java中消除实现继承和面向接口编程
基于Delphi的异常处理技术探究
解析VB的事件驱动编程
实现Java平台的三种方式
JAVA中对象创建和初始化过程
推荐文章

 精彩友情推荐
·Asp源码 PHP源码
·CGI源码 JSP源码
·建站书籍教程
·服务器软件 .net源码
·建站工具软件
·IDC资讯大全
·机房品质万里行
·IDC托管必备知识
·全国IDC报价
·网站推广优化
最新更新 推荐文章
·框架:J2EE WEB应用架构分析…03-13
·几种VC++数据库开发技术的相对比…03-13
·利用C#实现标注式消息提示窗口03-13
·用C#创建COM对象03-13
·Visual C#多线程参数传递浅析…03-13
·Visual C#多线程参数传递浅析…03-13
·基于HOOK和MMF的Win密码渗透技术11-15
·Visual C++设计超强仿QQ自动伸缩…11-15
·Java SE 6.0实现高质量桌面集成开…11-15
·史玉柱东山再起幕后高人11-15
·用C#创建COM对象09-06
·IT管理十大失误及其对策08-30
·VC中利用MFC设计绘图程序初步08-23
·JAVA中对象创建和初始化过程08-23
·C语言中的位域的使用08-09
·浅谈Java桌面应用程序开发08-09
·C#的前途如何?08-02
·几种VC++数据库开发技术的相对比较07-12
·用Visual C#实现网络封包监视…07-12
·VB.NET中的TextBox控件详解07-12
·VB.NET实现PC与掌上电脑PPC的双向通信07-05