事件处理
1,委托事件模式
XXXEvent----XXXListener
Low-level Event和Semantic Event
2,WindowEvent
基本的实现原理,添加监听器,实现方法等
import java.awt.Frame; import java.awt.event.WindowEvent; import java.awt.event.WindowListener; /*窗口事件测试 * */ public class WindowEventTest { public static void main(String[] args) { //生成一个Frame窗口对象 Frame f = new Frame("WindowEventTest"); /*为这个Frame对象添加一个监听器,这个监听器是 * 一个类的对象,类是需要我们自己去写的,包含了 * 需要处理的事件的方法*/ f.addWindowListener(new WindowEventHandler()); f.setSize(200,200); f.show(); } } /*监听器的类,实现了WindowListener接口, * 必须实现里面的全部方法,这样会不会显得麻 * 烦呢,因为用不上的方法也要实现它*/ class WindowEventHandler implements WindowListener { public void windowClosing(WindowEvent e)//这件事系统已经给我们做了,我们写的方法是系统做了之后我们希望发生的事件 { System.out.println("Window Closing event"); System.exit(0); } public void windowIconified(WindowEvent e) { System.out.println("Window Iconified event"); } public void windowActivated(WindowEvent e) { System.out.println("Window Activated event"); } public void windowOpened(WindowEvent e) { System.out.println("Window Opened event"); } public void windowDeiconified(WindowEvent e) { System.out.println("Window Deiconified event"); } public void windowClosed(WindowEvent e) { System.out.println("Window Closed event"); } public void windowDeactivated(WindowEvent e) { System.out.println("Window Deactivated event"); } }
继承Adapter就不需要实现所有方法;
把事件源和监听器写在一个类里如何添加监听器
import java.awt.Frame; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseMotionListener; /*鼠标事件测试,这里事件源和事件监听器写在一个类里面了,即Frame向它自己所在的类注册 * ,因为监听器就是它自身,监听器处理事件的方法也写在这个类中,所以为了使得监听器中 * 的方法能使用Frame的对象(监听器的方法就是来对这个对象进行操作的),需要先将Frame * 声明为类的成员变量!!!!*/ //1,继承Adapter类就不用实现所有的方法 //2,因为它自身也是一个监听器,所以要implements事件处理的类Listener public class MouseEventTest extends MouseAdapter implements MouseMotionListener { //将事件源f声明为类的成员变量 Frame f; public static void main(String[] args) { new MouseEventTest(); } public MouseEventTest(){ f = new Frame("MouseEvent test"); f.addMouseListener(this); f.addMouseMotionListener(this); f.setSize(300,200); f.setVisible(true); } //监听器中的方法 public void mouseClicked(MouseEvent e) { f.setTitle("Mouse clicked!"); } public void mouseExited(MouseEvent e) { f.setTitle("Mouse exited!"); } //事件本身也是一个类,可以通过e来获得事件的相关参数和信息 public void mouseMoved(MouseEvent e) { int x = e.getX(); int y = e.getY(); f.setTitle("Mouse moved at (" + x +", " + y +")"); } public void mouseDragged(MouseEvent e) { } }
3,KeyEvent