




如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
•• •• 第12章事件处理 Java从入门到精通 第12章 事件处理 上一章主要讨论了组件的使用以及容器的布局,这些使Java图形用户界面的程序设计变 得灵活方便,但是与图形界面程序密切相关的还有一个比较重要的内容——事件处理机制。本章主要讲述事件处理模型的概念,介绍事件处理类、事件监听器、时间适配器等内容。 12.1 事件处理模型 以下3类与事件处理机制相关。 Event(事件对象):用户界面操作以类的形式描述,例如鼠标操作对应的事件类 MouseEvent,界面动作对应的事件类ActionEvent。 EventSource(事件源):产生事件的场所,通常指组件,例如按钮Checkbox。 Eventhandler(事件处理器):接收事件类并进行相应的处理对象。 例如,在窗口中有一个按钮,当用户用鼠标单击这个按钮时,会产生ActionEvent类的 一个对象。该按钮就是所谓的事件源,该对象就是鼠标操作所对应的事件,然后事件监听器接受触发的事件,并进行相应处理。 图12-1事件处理机制 同一个事件源可能会产生一个或者多个事件,Java语言采用授权处理机制(Delegation Model)将事件源可能产生的事件分发给不同的事件处理器。例如Panel对象可能发生鼠标事件和键盘事件,它可以授权处理鼠标事件的事件处理器来处理鼠标事件,同时也可以授权处理键盘事件的事件处理器处理键盘事件。事件处理器会一直监听所有的事件,直到有与之相匹配的事件,就马上进行相应的处理,因此事件处理器也称为事件监听器。 授权处理机制可以将事件委托给外部的处理对象进行处理,这就实现了事件源与事件处理器(监听器)的分离。通常事件处理者是一个事件类,该类必须实现处理该类型事件的接 口,并实现某些接口方法。例如程序12.1是一个演示事件处理模型的例子,类ButtonHandler 实现了ActionListener接口,该接口可以处理的事件是ActionEvent。 //导入需要使用的包和类 importjava.awt.*;importjava.awt.event.*; publicclassEventManagerDemon{ publicstaticvoidmain(String[]args){ finalFramef=newFrame("Test"); //声明,并初始化窗口对象fButtonb=newButton("PressMe!"); //声明,并初始化按钮对象b //注册监听器进行授权,该方法的参数是事件处理者对象b.addActionListener(newButtonHandler()); f.setLayout(newFlowLayout()); //为窗口设置布局管理器FlowLayoutf.add(b); //在窗口中添加按钮b f.setSize(200,100); //设置窗口大小f.addWindowListener(newWindowAdapter(){ publicvoidwindowClosing(WindowEventevt){f.setVisible(false); //设置窗口f不可见 f.dispose(); //释放窗口及其子组件的屏幕资源 System.exit(0); //退出程序 } }); f.setVisible(true); //显示窗口 } } //ButtonHandler实现接口ActionListener才能做事件ActionEvent的处理者 classButtonHandlerimplementsActionListener{publicvoidactionPerformed(ActionEvente) //ActionEvent事件对象作为参数 { System.out.println("时间发生,已经捕获到"); //本接口必须实现的方法actionPerformed } } 描述:事件处理模型演示 // 文件:程序12.1 EventManagerDemon.java 编写完程序后,使用javac命令编译该文件产生class文件,然后使用java命令运行该class 文件,运行结果如图12-2,按下“PressMe!”按钮,运行结果如图12-3所示。 图12-2EventManagerDemon.java运行结果一 图12-3EventManagerDemon.java运行结果二 程序12.1中,为窗口添加了WindowListener监听器和ActionListener监听器。监听器监听所有的事件,并当遇到与之匹配的事件,就调用响应的方法进行处理。每一个监听器接口 都有实现的方法,如ActionListener必须实现actionPerformed方法。Jav

睿达****的的
实名认证
内容提供者


最近下载