事件和事件源

来自CloudWiki
跳转至: 导航搜索

事件

事件代表了某对象可以执行的操作及状态。描述在某个时间,某个对象上,发生了某件事情。通过鼠标、键盘与 GUI 界面直接或间接交互都会生成事件。如:按下一个按钮、通过键盘输入一个字符、选择列表框中的一项、点击一下鼠标等。

事件处理模型由产生事件的对象(事件源)和事件对象(事件接口)以及监听者(事件监听器)对象组成。如图所示:

Java8-7.png

事件的执行流程:

当使用者在事件源上发生动作时,动作会激活事件监听器方法,事件监听器方法会收集事件源的信息,自动调用监听器方法中的对象参数的事件处理方法;执行事件处理方法中的代码,完成整个事件的操作。


例如:当用户用鼠标点击一个按钮登录(JButton的对象)时,登录按钮就是事件源,此时就会产生一个ActionEvent事件,事件监听器会捕获单击动作,并作出相应的反应。

Java事件体系结构

Java事件体系结构如图所示。

Java8-8.png

图 事件类体系图 Java事件类的说明详见表4-5。

表 Java事件类的相关说明

事件类	说明	事件源
ActionEvent 	通常按下按钮,双击列表项或选中一个菜单项时,就会生成此事件。 	Button、List、MenuItem、TextField 
AdjustmentEvent 	操纵滚动条时会生成此事件。 	Scrollbar 
ComponentEvent 	当一个组件移动、隐藏、调整大小或成为可见时会生成此事件。	Component 
ItemEvent 	单击复选框或列表项时,或者当一个选择框或一个可选菜单的项被选择或取消时生成此事件。 	Checkbox、CheckboxMenuItem、Choice、List 
FocusEvent 	组件获得或失去键盘焦点时会生成此事件。 	Component
KeyEvent 	接收到键盘输入时会生成此事件。 	Component 
MouseEvent 	拖动、移动、单击、按下或释放鼠标或在鼠标进入或退出一个组件时,会生成此事件。 	Component 
ContainerEvent 	将组件添加至容器或从中删除时会生成此事件。	Container 
TextEvent  	在文本区或文本域的文本改变时会生成此事件 。	TextField、TextArea 
WindowEvent 	当一个窗口激活、关闭、失效、恢复、最小化、打开或退出时会生成此事件。 	Window 

Java事件监听器和监听方法

java.awt.event包中还定义了11个监听者接口,每个接口内部包含了若干处理相关事件的抽象方法。如表所示,一般说来,每个事件类都有一个监听者接口与之相对应,而事件类中的每个具体事件类型都有一个具体的抽象方法与之相对应,当具体事件发生时,这个事件将被封装成一个事件类的对象作为实际参数传递给与之对应的具体方法,由这个具体方法负责响应并处理发生的事件。例如ActionListener,这个接口定义了抽象方法:public void actionPerformed(ActionEvent e)。凡是要处理ActionEvent事件的类都必须实现ActionListener接口,并重写相应的actionPerformed()方法 表 Java事件监听器和监听方法

事件监听器	方法
ActionListener 	actionPerformed 
AdjustmentListener 	adjustmentValueChanged 
ComponentListener 	componentResized、componentMoved、componentShown、componentHidden 
ContainerListener 	componentAdded、componentRemoved 
FocusListener 	focusLost、focusGained 
ItemListener 	itemStateChanged 
KeyListener 	keyPressed、keyReleased、keyTyped 
MouseListener 	mouseClicked、mouseEntered、mouseExited、mousePressed、mouseReleased 
MouseMotionListener 	mouseDragged、mouseMoved 
TextListener 	textChanged 
WindowListener 	windowActivated、windowDeactivated、windowClosed、windowClosing
windowIconified、windowDeiconified、windowOpened

返回 Java程序设计