第七章(2)事件驱动程序 目标: 解释事件驱动程序的概念 了解事件、事件源和事件类 声明监听器类并编写代码处理事件 在事件源对象中注册监听器对象 理解事件处理的方式 编写程序处理行为事件 Action event 编写程序处理鼠标事件 Mouse event 编写程序处理键盘事件 KeyEvent 使用Time类控制动画
第七章(2)事件驱动程序 目标: 解释事件驱动程序的概念 了解事件、事件源和事件类 声明监听器类并编写代码处理事件 在事件源对象中注册监听器对象 理解事件处理的方式 编写程序处理行为事件ActionEvent 编写程序处理鼠标事件MouseEvent 编写程序处理键盘事件KeyEvent 使用Time类控制动画
引言 所有非GUI程序都是按过程的顺序执行 Java gu程序设计是事件驱动的,在事 件驱动程序设计中,激活一个事件时开 始执行相应的代码,事件也许是点击按 钮,也许是移动鼠标
引言 所有非GUI程序都是按过程的顺序执行 Java GUI程序设计是事件驱动的,在事 件驱动程序设计中,激活一个事件时开 始执行相应的代码,事件也许是点击按 钮,也许是移动鼠标
Eⅴents 事件可以定义为程序发生了某些事件的信号。 比如,外部用户行为,移动鼠标、点击鼠标和 按下键盘等,都可以引发事件。操作系统,如 时钟等,也可以引发事件 薯件源对象:在基上发生事件的组件。如按钮 是点击按钮事件的源对象。 一个事件是事件类的对 事件类的根类是 ava.util. Eventobject事件类的层次关系如下 图所示:
Events 事件可以定义为程序发生了某些事件的信号。 比如,外部用户行为,移动鼠标、点击鼠标和 按下键盘等,都可以引发事件。操作系统,如 时钟等,也可以引发事件。 事件源对象:在其上发生事件的组件。如按钮 是点击按钮事件的源对象。 一个事件是事件类的对象,事件类的根类是 java.util.EventObject。事件类的层次关系如下 图所示:
Event classes Actionevent Container event Adjustment Event Focus Event Mouse event EventObject AWTEvent ComponentEvent InputEvent ItemEvent Paint Event Event Text Event Window Event Listselection Ev 注:除 Listselection Event外,上面所有事件类都包含在包 ava.awt event中。AWT事件最初是为AWT组件设计的,但许 多Swng组件都可以触发它们
Event Classes EventObject AWTEvent AdjustmentEvent ComponentEvent TextEvent ItemEvent ActionEvent InputEvent WindowEvent MouseEvent KeyEvent ContainerEvent FocusEvent PaintEvent ListSelectionEvent 注:除ListSelectionEvent外,上面所有事件类都包含在包 java.awt.event中。AWT事件最初是为AWT组件设计的,但许 多Swing组件都可以触发它们
Eⅴ ent Information 事件对象包含与事件相关的一切属性,可以使 用 Eventobject类中的实例方法 getSourceo获得 事件的源对象。 Eventobject类的子类处理特定类型的事件,如 行为事件、窗口事件等,下表列出了部分事件
Event Information 事件对象包含与事件相关的一切属性,可以使 用EventObject类中的实例方法getSource()获得 事件的源对象。 EventObject类的子类处理特定类型的事件,如 行为事件、窗口事件等,下表列出了部分事件
用户行为、源对象和事件类型 用户行为 源对象 事件类型 点击按钮 JBut七on Ac七 nonEvent 点击复选框 CHeckbOx I temEvent ActionEvent 点击单选按钮 RAdiobUtton ItemEvent ActionEvent 在文本框按下回车键 TExtfIeld Ac七i。 nEver七 选定一个新项 JCombobox ItemEvent ActionEvent 窗口打开、关闭、最小化等 W主ndow WindowEvent 按下、释放、点击鼠标等 Component Mouseevent 释放或按下键盘上的键 Component Keyevent 注:如一个组件能够发生某个事件,则这个组件的任何子类 都能发生同样类型的事件
用户行为、源对象和事件类型 用户行为 源对象 事件类型 点击按钮 JButton ActionEvent 点击复选框 JCheckBox ItemEvent, ActionEvent 点击单选按钮 JRadioButton ItemEvent, ActionEvent 在文本框按下回车键 JTextField ActionEvent 选定一个新项 JComboBox ItemEvent, ActionEvent 窗口打开、关闭、最小化等 Window WindowEvent 按下、释放、点击鼠标等 Component MouseEvent 释放或按下键盘上的键 Component KeyEvent 注:如一个组件能够发生某个事件,则这个组件的任何子类 都能发生同样类型的事件
事件的监听、注册和处理 Java使用事件委托处理模型来处理事件:在源对 象上的外部用户行为触发事件,监听该事件的对 象自动调用相应的事件处理方法进行处理 如何成为源对象上事件的监听器? 监听器对象的类必须实现相应的事件监听器接口 Java为每一种类型的GUI事件都提供了监听器接口。 通常事件ⅹ Event的监听接口命名为 LIStener。监听接 口包含处理事件的方法。 源对象必须注册监听器对象。一般来说, XEvent的注 册方法名为 addXListener。一个源对象可以注册多个监 听器,以对多种事件起作用
事件的监听、注册和处理 Java使用事件委托处理模型来处理事件:在源对 象上的外部用户行为触发事件,监听该事件的对 象自动调用相应的事件处理方法进行处理。 如何成为源对象上事件的监听器? – 监听器对象的类必须实现相应的事件监听器接口。 Java为每一种类型的GUI事件都提供了监听器接口。 通常事件XEvent的监听接口命名为XListener。监听接 口包含处理事件的方法。 – 源对象必须注册监听器对象。一般来说,XEvent的注 册方法名为addXListener。一个源对象可以注册多个监 听器,以对多种事件起作用
事件、事件监听接口和监听接口方法 Event Class istener Interface Listener Methods(handlers) Ac七i。 eVent Ac七i。 lIstens actionPerformed(ActionEvent) 工七 emEvent 工 temlistener itemState Changed(ItemEvent WindowEvent W主 ndowlistener windowClosing(WindowEvent) ndowOpened(WindowEvent) windowIconified(WindowEvent windowDeiconified (WindowEvent) dowclosed(WindowEvent) windowActivated (windowevent) ndowDeactivated (windowE vent) ContainerEvent ContainerListener componentAdded(ContainerEvent) componentRemoved (ContainerEvent) MouseEvent Mouselistener mousepressed (mouseevent) mouseReleased (Mouseevent) clicked (MouseEvent) mouseExited (Mouseevent) mouseEntered (MouseEvent) keyevent KeyListener keyPressed (keyEvent keyreleased (keyevent) keyTypeed (keyevent)
事件、事件监听接口和监听接口方法 Event Class Listener Interface Listener Methods (Handlers) ActionEvent ActionListener actionPerformed(ActionEvent) ItemEvent ItemListener itemStateChanged(ItemEvent) WindowEvent WindowListener windowClosing(WindowEvent) windowOpened(WindowEvent) windowIconified(WindowEvent) windowDeiconified(WindowEvent) windowClosed(WindowEvent) windowActivated(WindowEvent) windowDeactivated(WindowEvent) ContainerEvent ContainerListener componentAdded(ContainerEvent) componentRemoved(ContainerEvent) MouseEvent MouseListener mousePressed(MouseEvent) mouseReleased(MouseEvent) mouseClicked(MouseEvent) mouseExited(MouseEvent) mouseEntered(MouseEvent) KeyEvent KeyListener keyPressed(KeyEvent) keyReleased(KeyEvent) keyTypeed(KeyEvent)
委托代理模型 Register by invoking Trigger an event source. addXlistener(listener); User source: sourceclas listener: Listener Class Action +addXListener(LIstener listener) Keep it a list LIstener event: XEvent listener 1 Invoke listener 2 listener l handler(event) handler(XEvent event listener2. handler(event) histenern stenen handler(event) Internal function of the source object
委托代理模型 source: SourceClass +addXListener(XListener listener) User listener: ListenerClass Action Trigger an event XListener +handler(XEvent event) Internal function of the source object event: XEvent listener1 listener2 … listenern +handler( XEvent Register by invoking source.addXListener(listener); Keep it a list Invoke listener1.handler(event) listener2.handler(event) … listenern.handler(event)
委托代理模型举例 source: jButton ActionListener +addActionListener( Action Listener listener taction Performed(Action Event event) Register by invoking sourceaddActionListener(listener),listener: ListenerClass ListenerClass listener new Listenerclass o JButton jbt new JButton("Ok")i jbt addActionlistener (listener)i
委托代理模型举例 source: JButton +addActionListener(ActionListener listener) listener: ListenerClass ActionListener +actionPerformed(ActionEvent event) Register by invoking source.addActionListener(listener); ListenerClass listener = new ListenerClass(); JButton jbt = new JButton("OK"); jbt.addActionListener(listener);