在文本域中首先出现的是"event is:test",这是因为首先得到处理的是EventQueue对象发送到系统事件队列上的ActionEvent。
下面的代码简单说明了如何捕获事件:
import java.awt.EventQueue; import java.awt.*; import java.util.*; public class MyQueueEvent extends EventQueue { //定义EventQueue的子类 public MyQueueEvent() { } public static void main(String[] args) { SimpleExample.main(new String[]{null}) ; MyQueueEvent myQueueEvent1 = new MyQueueEvent(); Toolkit.getDefaultToolkit(). getSystemEventQueue().push(myQueueEvent1) ; } //在这里重载事件分发的方法 public void dispatchEvent(AWTEvent ae) {
if(ae.getSource() instanceof javax.swing.JButton) System.out.println ("My apture:"+((javax.swing.JButton) ae.getSource()).getText()) ; super.dispatchEvent(ae); } 这个程序可以打印出当前应用的所有的事件,可以将这些事件中选出你需要的事件保存当然你还需要解析该控件的特征。在上面加黑部分的代码,打印事件源控件的名称。
除此之外,还可以通过实现java.awt.event. AWTEventListener接口实现对事件的捕获。这个侦听器接口可以接收Component or MenuComponent以及它们的派生类在整个系统范围内所分发的事件,AWTEventListeners只是被动的监控这些事件。
如果要监控系统事件,除了要实现接口,还要用Toolkit的addAWTEventListener方法注册这个侦听器。
下面我们来看一个实例:
import java.awt.AWTEvent; import java.awt.Frame; import java.awt.Toolkit; import java.awt.Window; import java.awt.event.AWTEventListener; import java.awt.event.WindowEvent;
import java.util.ArrayList; import java.lang.ref.WeakReference; public class MyAWTEventListener implements AWTEventListener { private static MyAWTEventListener s_singleton = null; //保证该类只被初始化一次 public static MyAWTEventListener getInstance() { if(s_singleton==null) { s_singleton=new MyAWTEventListener(); } return s_singleton; } private MyAWTEventListener() { //注意下面这行代码,如果没有这行代码, 将无法接收到系统分发的事件 // 下面代码在注册时, 只请求了接收WINDOW_EVENT_MASK事件 //但实际上, 你可以接收其他AWTEvent中定义的事件类型 Toolkit.getDefaultToolkit().addAWTEventListener (this, AWTEvent.COMPONENT_EVENT_MASK ); } /* 这就是接口方法的实现 */ public void eventDispatched (final AWTEvent theEvent) { processEvent(theEvent); } private static void processEvent (final AWTEvent theEvent) { System.out.println (theEvent.getSource() ) ; //打印事件源 switch (theEvent.getID()) { case WindowEvent.WINDOW_OPENED: //System.out.println (((Frame)theEvent.getSource()).getTitle() ) ; case WindowEvent.WINDOW_ACTIVATED: case WindowEvent.WINDOW_DEACTIVATED: case WindowEvent.WINDOW_CLOSING: default: break; } } }
|