java事件监听器--java
java requestcontextlistener使用

java requestcontextlistener使用
Java的RequestContextListener是一个监听器,用于在servlet容器中监视请求上下文的生命周期。
当请求到达时,它会创建一个新的请求上下文,并将其绑定到当前线程。
当请求处理完成时,它将清除请求上下文,并解除该请求上下文与当前线程的绑定。
RequestContextListener经常与Spring框架一起使用,以便在请求处理期间共享上下文信息。
它可以通过web.xml文件配置,并在Java Servlet容器启动时自动加载。
在使用RequestContextListener时,需要注意以下几点:
1. RequestContextListener应该放在web.xml文件中的其他监听器之前。
2. RequestContextListener应该在使用Spring框架时使用。
在Spring框架中,可以使用RequestContextHolder来获取请求上下文,以便在请求处理中轻松地共享上下文信息。
3. 如果使用了多个过滤器,应该确保它们都需要请求上下文,否则可能会出现不必要的开销。
4. 请求上下文中存储的信息应该是线程安全的,以便在处理多个请求时,不会出现数据竞争的问题。
总之,RequestContextListener是一个非常有用的监听器,可以帮助开发人员在Java Servlet容器中轻松地共享请求上下文信息。
在使用它时,需要注意上述几点,以确保它能够正常工作并提
高应用程序的性能。
Java的监听器种类

Java的监听器种类网上整理!Listener是Servlet的监听器,它可以监听客户端的请求、服务端的操作等。
(通过监听器,可以自动激发一些操作,比如监听在线的用户的数量。
当增加一个HttpSession时,就激发 sessionCreated(HttpSessionEvent se)方法,这样就可以给在线人数加1。
)Servlet 监听器用于监听一些重要事件的发生,监听器对象在事情发生前、发生后可以做一些必要的处理。
目前 Servlet2.4 和 JSP2.0 常用的有7 个监听器接口,分为3 类:1. Servlet上下文进行监听(Application级):用于监听 ServletContext 对象的创建和删除以及属性的添加、删除和修改等操作,该监听器需要用到如下两个接口类:(1) ServletContextAttributeListener:监听对 ServletContext 属性的操作,比如增加、删除、修改attributeAdded(ServletContextAttributeEvene) 添加属性时调用attributeReplaced(ServletContextAttributeEvente) 修改属性时调用attributeRemoved(ServletContextAttributeEvente) 删除属性时调用(2) ServletContextListener:监听对 ServletContext 对象的创建和删除contextInitialized(ServletContextEventsce) 初始化时调用contextDestroyed(ServletContextEvent sce) 销毁时调用,即当服务器重新加载时调用2. 监听HTTP会话(Session级):用于监听 HTTP 会话活动情况和 HTTP 会话中的属性设置情况,也可以监听HTTP 会话的 active 和 passivate 情况等,该监听器需要用到如下多个接口类: (1) HttpSessionListener:监听 HttpSession 的操作sessionCreate(HttpSessionEvent se) 初始化时调用;sessionDestroyed(httpSessionEvent se) 销毁时调用,即当用户注销时调用Java代码1. package com.wl.listener.test;2.3.import javax.servlet.http.HttpSessionEvent;4.import javax.servlet.http.HttpSessionListener;5.6.public class HttpSessionListenerTest implements HttpSessionListener {7.8. public void sessionCreated(HttpSessionEvent arg0) {9.10. System.out.println("SSSSSSSSSSSSSSSSSS");11. }12.13. public void sessionDestroyed(HttpSessionEvent arg0) {14.15. System.out.println("EEEEEEEEEEEEEEEEEEE");16. }17.18.}在Web.xml的配置如下:Java代码1.<listener>2. <listener-class>com.wl.listener.test.HttpSessionListenerTest</listener-class>3. </listener>(2) HttpSessionActivationListener:用于监听 HTTP 会话的 active 和passivate 情况(3) HttpSessionAttributeListener:监听 HttpSession 中的属性操作attributeAdded(HttpSessionBindingEvent se) 添加属性时调用attributeRemoved(HttpSessionBindingEvent se) 删除属性时调用attributeReplaced(HttpSessionBindingEvent se) 修改属性时调用3. 对客户端请求进行监听(Requst级):用于对客户端的请求进行监听是在 Servlet2.4 规范中新添加的一项新技术,使用的接口如下:(1) ServletRequestListener 接口类requestDestroyed(ServletRequestEvent e) 对销毁客户端进行监听,即当执行 request.removeAttribute("xxx") 时调用requestInitialized(ServletRequestEvent e) 对实现客户端的请求进行监听Java代码1.package com.wl.listener.test;2.3.import javax.servlet.ServletRequestEvent;4.import javax.servlet.ServletRequestListener;5.6.public class ServletRequestListenerTest implements ServletRequestListener {7.8. public void requestDestroyed(ServletRequestEvent arg0) {9.10. System.out.println("ServletRequestListenerTest is destroyed .......");11. }12.13. public void requestInitialized(ServletRequestEvent arg0) {14.15. System.out.println("ServletRequestListenerTest is start.......");16. }17.18.}在Web.xml中添加如下配置:Java代码1. <listener>2. <listener-class>com.wl.listener.test.ServletRequestListenerTest</listener-class>3.</listener>(2) ServletRequestAttributeListener 接口类attributeAdded(ServletRequestAttributeEvent e) 对属性添加进行监听attributeRemoved(ServletRequestAttributeEvent e) 对属性删除进行监听attributeReplaced(ServletRequestAttributeEvent e) 对属性替换进行监听。
Java添加事件监听的四种方法代码实例

Java添加事件监听的四种⽅法代码实例Java添加事件的⼏种⽅式(转载了codebrother的⽂章,做了稍微的改动):/*** Java事件监听处理——⾃⾝类实现ActionListener接⼝,作为事件监听器** @author codebrother*/class EventListener1 extends JFrame implements ActionListener {private JButton btBlue, btDialog;public EventListener1() {setTitle("Java GUI 事件监听处理");setBounds(100, 100, 500, 350);setLayout(new FlowLayout());btBlue = new JButton("蓝⾊");btDialog = new JButton("弹窗");// 将按钮添加事件监听器btBlue.addActionListener(this);btDialog.addActionListener(this);add(btBlue);add(btDialog);setVisible(true);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}// ***************************事件处理***************************@Overridepublic void actionPerformed(ActionEvent e) {if (e.getSource() == btBlue) {Container c = getContentPane();c.setBackground(Color.BLUE);}else if (e.getSource() == btDialog) {JDialog dialog = new JDialog();dialog.setBounds(300, 200, 400, 300);dialog.setVisible(true);}}}/*** Java事件监听处理——内部类处理** @author codebrother*/class EventListener3 extends JFrame {private JButton btBlue, btDialog;// 构造⽅法public EventListener3() {setTitle("Java GUI 事件监听处理");setBounds(100, 100, 500, 350);setLayout(new FlowLayout());btBlue = new JButton("蓝⾊");btDialog = new JButton("弹窗");// 添加事件监听器对象(⾯向对象思想)btBlue.addActionListener(new ColorEventListener());btDialog.addActionListener(new DialogEventListener());add(btBlue);add(btDialog);setVisible(true);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}// 内部类ColorEventListener,实现ActionListener接⼝class ColorEventListener implements ActionListener {@Overridepublic void actionPerformed(ActionEvent e) {Container c = getContentPane();c.setBackground(Color.BLUE);}}// 内部类DialogEventListener,实现ActionListener接⼝ class DialogEventListener implements ActionListener { @Overridepublic void actionPerformed(ActionEvent e) {JDialog dialog = new JDialog();dialog.setBounds(300, 200, 400, 300);dialog.setVisible(true);}}}/*** Java事件监听处理——匿名内部类处理** @author codebrother*/class EventListener2 extends JFrame {private JButton btBlue, btDialog;public EventListener2() {setTitle("Java GUI 事件监听处理");setBounds(100, 100, 500, 350);setLayout(new FlowLayout());btBlue = new JButton("蓝⾊");btDialog = new JButton("弹窗");// 添加事件监听器(此处即为匿名类)btBlue.addActionListener(new ActionListener() {// 事件处理@Overridepublic void actionPerformed(ActionEvent e) {Container c = getContentPane();c.setBackground(Color.BLUE);}});// 并添加事件监听器btDialog.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {JDialog dialog = new JDialog();dialog.setBounds(300, 200, 400, 300);dialog.setVisible(true);}});add(btBlue);add(btDialog);setVisible(true);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); }}/*** Java事件监听处理——外部类处理** @author codebrother*/class EventListener4 extends JFrame {private JButton btBlue, btDialog;public EventListener4() {setTitle("Java GUI 事件监听处理");setBounds(100, 100, 500, 350);setLayout(new FlowLayout());btBlue = new JButton("蓝⾊");btDialog = new JButton("弹窗");// 将按钮添加事件监听器btBlue.addActionListener(new ColorEventListener(this)); btDialog.addActionListener(new DialogEventListener());add(btBlue);add(btDialog);setVisible(true);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); }}// 外部类ColorEventListener,实现ActionListener接⼝class ColorEventListener implements ActionListener {private EventListener4 el;ColorEventListener(EventListener4 el) {this.el = el;}@Overridepublic void actionPerformed(ActionEvent e) {Container c = el.getContentPane();c.setBackground(Color.BLUE);}}// 外部类DialogEventListener,实现ActionListener接⼝class DialogEventListener implements ActionListener { @Overridepublic void actionPerformed(ActionEvent e) {JDialog dialog = new JDialog();dialog.setBounds(300, 200, 400, 300);dialog.setVisible(true);}}public class ActionListenerTest{public static void main(String args[]){new EventListener2();}}。
rxjava监听publishsubject用法

rxjava监听publishsubject用法RxJava是一个在Android开发中广泛使用的响应式编程库。
其强大的事件处理能力让开发者能够更加灵活和高效地处理异步任务。
在RxJava中,PublishSubject是一种特殊类型的Subject,它既可以作为观察者,也可以作为被观察者。
在使用RxJava监听PublishSubject时,需要按照以下步骤进行:1. 创建PublishSubject对象:在RxJava中,我们首先需要创建一个PublishSubject对象,它既可以作为观察者接收事件,也可以作为被观察者发送事件。
2. 添加观察者:我们可以通过调用PublishSubject对象的subscribe()方法来添加观察者,观察者将会接收到PublishSubject发送的事件。
3. 发送事件:通过调用PublishSubject对象的onNext()方法,可以向所有已经订阅的观察者发送事件。
观察者将会根据接收到的事件执行相应的操作。
4. 监听事件:通过订阅PublishSubject对象,我们可以监听并处理观察者发送的事件。
监听可以使用subscribe()方法来实现。
需要注意的是,PublishSubject在被订阅之后,只会接收到订阅之后发送的事件。
如果在订阅之前已经有事件发送,则订阅后将不会接收到之前发送的事件。
在实际应用中,PublishSubject可以用于多个观察者之间的通信,通过将PublishSubject作为一个中介,实现观察者之间的消息传递。
总结而言,使用RxJava监听PublishSubject需要创建PublishSubject对象,添加观察者,发送事件,并通过订阅PublishSubject对象来监听事件。
通过这种方式,我们可以更加灵活地处理异步任务,并实现观察者之间的通信。
listener、filter、servlet内存马原理

listener、filter、servlet内存马原理Listener、Filter、Servlet内存马原理引言随着Web应用程序的快速发展,保护Web应用程序的安全性变得越来越重要。
然而,Web应用程序中的安全漏洞却层出不穷,其中包括内存马(memshell)的攻击方式。
内存马指的是一种攻击技术,通过在服务器内存中注入恶意代码来获取对服务器的控制权。
本文将围绕Listener、Filter和Servlet这三个核心组件展开讨论,探究内存马攻击在这些组件中的原理及防御措施。
一、Listener的基本原理在Java Web应用程序中,Listener是一种用于监听Web应用程序中特定事件的组件。
它可以监听ServletContext(应用程序级别)、HttpSession(会话级别)和ServletRequest(请求级别)等不同级别的事件。
当某个事件发生时,Listener可以执行预定义的操作。
1.1 Listener的注册和触发在Web应用程序启动时,容器会根据部署描述文件(web.xml)中的配置自动注册Listener。
当发生事件时,容器会触发相应的事件监听器进行处理。
1.2 Listener内存马原理攻击者可以通过Listener注入恶意代码来执行恶意操作。
具体来说,攻击者将恶意代码编写到一个实现了特定监听器接口的类中,并将该类的实例注册到应用程序中。
当事件触发时,容器会调用相应的监听器方法。
如果存在恶意代码,它将被执行,并可能对服务器进行攻击,如获取敏感信息、操纵服务器配置等。
1.3 Listener的防御措施为了保护Web应用程序免受Listener注入攻击,我们可以采取以下措施:- 避免使用不必要的Listener:只注册需要的Listener,避免不必要的风险。
- 对注册的Listener进行严格审查:审查应用程序中注册的Listener代码,确保它们不包含任何可疑的操作。
- 限制Listener的执行权限:使用安全策略文件(security policy)对Listener的执行权限进行限制,仅允许它们执行必要的操作。
java名词listener解释

java名词listener解释
在Java中,Listener(监听器)是一种特殊的对象,用于监听某个事件的发生。
Listener通常与事件处理器(EventHandler)搭配使用,用于在特定事件发生时执
行相应的操作。
在Java中,Listener通常以接口的形式存在,用于监听某个特定事件。
当事件
发生时,Listener会接收到通知并执行相应的操作。
例如,Swing中的ActionListener用于监听按钮的点击事件,当用户点击按钮时,ActionListener会接
收到通知并执行相应的操作。
Listener的使用可以帮助程序实现事件驱动的机制,提高程序的灵活性和扩展性。
通过监听器,程序可以在特定事件发生时执行相应的操作,而无需在每个事件点上硬编码相应的逻辑。
Listener的设计符合面向对象的原则,将事件处理逻辑和业务逻辑分离,使程
序结构更清晰,更易于维护和扩展。
同时,Listener的使用也有助于减少代码的耦
合性,提高代码的可复用性。
总的来说,Listener在Java中扮演着监听事件、执行相应操作的重要角色,是
事件驱动编程中不可或缺的部分。
通过Listener的使用,可以实现程序的松耦合、
高内聚,提高程序的可维护性和可扩展性,是Java编程中的重要概念之一。
Java的事件处理机制剖析

事件源所产生 的事件相对应的监听接 口,执行接 口中提供 的事 件处理方法 , 方可实现监 听和处理功Biblioteka [ 1 J 。整个事件处理机制 是
、
Jv a a的事件 处理模 式
并 事件 和监 听 Jv 使用了基 于代 理的事件处理模式 ,主要 由事件 、事件 由事件源和监听器协调完成 , 由用户 以及事件源 、 aa 器三种对象参与。 源、 事件监 听器 三部分相互关联 而成 , 当事件发生 时 , 由事件源
如 图 1 示 l 所 3 l 。
用
或多个方法。当发生特定 的事件 时, 就会 调用这些方法 。
二 、a a的事 件 处 理 过 程 圆 Jv
Jv 事件处理过程如下 , J ut aa 以 B t n作事件源为例 。 o
1 创 建 事 件 监 听 器 、
创建用于 响应事件动作发生的监听器对 象。如定 义一个实 现监 听接 口A t n ie e 的类 Jeet此类 的对象 即为监 听器 ci Ls n r o t bvn,
Jv 是一种面向对象程序设计语 言 , v U 图形用户界 对应 的事件监 听器 , 于监 听事 件的产生。事件监听器( ie — aa J a I( a G 用 Ls n t 面 )程序 的执行是 由事件驱动 的。为了实现用户与组成程序的 e) r是接 受事件并实现事件处理 的对象 。 事件监听器必须实现与 G I U 组件 问的交互 , v J a引入 了事件处理机制这一重要技术。 a
ae ButnAcin v n v n rc si ga ne a l f h rga tdJ t t E e t e t o e s s x mpeo epo mmigisrcin . o o e p n a t r n t t s n u o Ke wo d J v y rs aa Ev n a dig et n l h n Ev n o re e t uc s s L se e itn r
java 事件处理模型

java 事件处理模型当用户在Java GUI界面进行一些操作时,例如,移动鼠标、选取菜单项目等,将会引发相关事件(Event)。
在Java中,事件用具体的对象来表示,用户的相关动作会由JVM(Java虚拟机)创建成相应的事件对象,用以描述事件来源、事件类型以及相关的信息。
1.事件处理流程Java对事件的处理采用授权事件模型,也称为委托事件模型(Delegation Even t Model)。
在这个模型下,每个组件都有相应的事件,如按钮具有单击事件,文本域具有内容改变事件等。
当对于某个组件的事件被触发后,组件就会将事件发送给组件上注册的每一个事件监听器(EventListener),事件监听器中定义了与不同事件相对应的事件处理者,此时事件监听器会根据不同的事件信息调用不同的事件处理者,完成对这次事件的处理。
只有向组件注册的事件监听器才会收到事件信息。
此种模型的显著特点是,当组件被触发事件后,本身不去处理,而将处理的操作交给第三方来完成。
例如,当用户在GUI界面单击了一个按钮信息,此时按钮就是一个事件源对象,按钮本身没有权利对这次单击做出反应,需要做的就是将信息发送给本身注册的监听器(事件处理者)来处理。
在现实生活中,授权处理的实例也是非常的多。
打个不太恰当的比喻,比如说有一位李先生,李先生可能会发生很多法律纠纷,可能是民事法律纠纷,也可能是刑事法律纠纷,那么李先生可以请律师,他可以授权王律师负责帮他打民事法律的官司,同时也可以授权张律师帮他打刑事法律的官司。
这个请律师的过程从李先生的角度来看,就是授权的过程,而从王律师和张律师的角度来看,一旦被授权,他们就得时刻对李先生负责,时刻“监听”李先生的事件信息,一旦发生民事纠纷了,王律师就要马上去处理,而一旦发生刑事纠纷了,张律师就要马上进行处理。
此时此刻,李先生就是事件源,王律师是一个事件处理者,张律师是另外一个事件处理者,民事纠纷和刑事纠纷就是不同类型的事件。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
产生事件 (ActionEvent) 用户操作 (单击按钮) 事件源 (Button) 注册 事件监听者 委托执行 事件监听程序 (执行ActionListener接口 actionPerformed方法)
JDK1.1的委托事件模型
为按钮注册事件监听程序
public void addActionListener(ActionListener handler)
单击按钮, 文本行中单击回车键, 双击列表框 选择菜单项时 文本行、文本区中修改内 容 选择复选框、选择框, 单击列表框, 选中带复选框的菜单项 鼠标 鼠标 单击鼠标时 鼠标进入 鼠标离开 按下鼠标时 放开鼠标时 按下键盘时 释放键盘时 获得焦点时 失去焦点时
textValueChanged(TextEvent e)
6.2.4 事件适配器
适配器类实现一个对应的所有接口,只是方法为空。 适配器类实现一个对应的所有接口,只是方法为空。
public abstract class WindowAdapter implements WindowListener { public void windowOpened(WindowEvent e) {} public void windowActivated(WindowEvent e) {} public void windowDeactivated(WindowEvent e) {} public void windowClosed(WindowEvent e) {} public void windowClosing(WindowEvent e) {} public void windowIconified(WindowEvent e) {} public void windowDeiconified(WindowEvent e) {} }
获得产生该事件的组件类型, 或使用运算符 instanceof 获得产生该事件的组件类型,以决定执行哪一 个组件的事件响应程序。 个组件的事件响应程序。
(1)动作事件(ActionEvent) )动作事件( )
2、使用方法
发生在用户完成了使用下列组件之一的动作: 发生在用户完成了使用下列组件之一的动作: Button , CheckBox , ComboBox , TextField , RadioButton • 类为了能够处理这些事件必须实现接口 ActionListener 。 • 每个产生一个动作事件的组件上要调用方法 addActionListener( ) • 方法 actionPerformed(ActionEvent evt) 是接口 ActionListener 惟一的 方法采用如下格式: 方法采用如下格式: public void actionPerformed(ActionEvent evt) { //…… } • 在 ActionEvent 对象上可以使用的方法: 对象上可以使用的方法: • getSource( ) 获取产生事件组件的组件名 • getActionCommand( ) 获取与组件有关的文本,如命令按钮的标签 获取与组件有关的文本,
(1)设置组件
当你将一个类用作事件监听器时,你已经设置好一个特定的事件类型, 当你将一个类用作事件监听器时,你已经设置好一个特定的事件类型, 它会用该类进行监听。接下来的操作是: 它会用该类进行监听。接下来的操作是:一个匹配的监听器必须被加入到该 组件中 组件被创建之后, 组件被创建之后,可以在组件上调用如下方法来将监听器与它联系起来 • addActionListener( ) • addAdjustmentListener( ) • addFocusListener( ) • addItemListener( ) • addKeyListener( ) • addMouseListener( ) • addWindowsListener( ) 可用于 Button,Check, TexyField 等组件 可用于 ScrollBar 组件 可用于所有可视化组件 可用于 Button,CheckBox 等组件 可用于所有可视化组件 可用于所有可视化组件 可用于 Window,Frame等组件 等组件
必须实现ActionListener接口中 actionPerformed方法
public void actionPerformed(ActionEvent e)
6.2.2 AWTEvent事件类
ng.Object
java.awt.event包
ActionEvent 按钮单击事件 ContainerEvent 容器事件 FocusEvent 焦点事件 InputEvent 输入事件 WindowEvent 窗口事件 KeyEvent 键盘事件 MouseEvent 鼠标事件
注意: 、在图形用户界面上只有一个组件具有动作事件监听器时, 注意:1、在图形用户界面上只有一个组件具有动作事件监听器时,这个 actionPerformed( ) 方法可以用来响应由该组件产生的一个事件。 方法可以用来响应由该组件产生的一个事件。 2、如果超过一个组件具有动作事件监听器时,你必须找出哪个组 、如果超过一个组件具有动作事件监听器时, 件被使用而产生了动作。 件被使用而产生了动作。 某个类型的一个事件对象被传递给事件处理方法。 某个类型的一个事件对象被传递给事件处理方法。这个对象的方法 getSource( ) 可以用来判断出发送给事件的组件名。 可以用来判断出发送给事件的组件名。
MouseEvent 鼠标事件类 MouseListener 鼠标按钮事件接口
KeyEvent键盘事件 KeyListener键盘事件接口 FocusEvent焦点事件 FocusListener焦点事件接口
keyReleased(KeyEvent e) keyTyped(KeyEvent e) focusGained(FocusEvent e) focusLost(FocusEvent e)
itemStateChanged(ItemEvent e) mouseDragged(MouseEvent e) mouseMoved(MouseEvent e) mouseClicked(MouseEvent e) mouseEntered(MouseEvent e) mouseExited(MouseEvent e) mousePressed(MouseEvent e) mouseReleased(MouseEvent e) keyPressed(KeyEvent e)
声明可响应动作事件类的格式:
[修饰符 class 类名 extends 容器类类名 implements 事件监听器 修饰符] 修饰符 例如: 例如: public class abc extends Frame implements ActionListener 说明在 abc 类中可响应动作事件 public class def extends Applet impements KeyListener 说明在 def 类中可以响应键盘事件 注意: 注意:基本的事件监听器在包 java.awt.event 中,因此程序中要引入该包
(2)调整事件(AdjustmentEvent)
组件时发生调整事件。 在移动一个 ScrollBar 组件时发生调整事件。 • 为了处理这些事件,类必须实现 AdjustmentListener 接口。 为了处理这些事件, 接口。 • 每个产生一个调整事件的组件上要调用方法 addAdjustmentListener( ) • 方法 adjustmentValueChanged(AdjustmentEvent) 是该接口唯一的方法, 是该接口唯一的方法, 格式: 格式:public void adjustmentValueChanged(AdjustmentEvent evt) { //…… }
ActionEvent 单击事件类 ActionListener 单击事件接口 TextEvent文本框事件类 TextListener文本框事件接口 ItemEvent选择事件类 ItemListener选择事件接口 MouseEvent鼠标事件类 MouseMotionListener
actionPerformed(ActionEvent e)
事件处理
Frame Panel Button 单击事件
产生事件 用户操作 (单击按钮) 事件源 (Button) 执行组件的 事件处理程序 容器 (Panel) 执行容器的 事件处理程序 外层容器 (Frame) 执行容器的 事件处理程序
Frame Panel Button
Panel和Frame的 事件处理程序 Action事件对象 Action事件处理程序 actionPerformed(ActionEvent e) { …… }
java.util.EventObject
ComponentEvent 组件事件
java.awt.AWTEvent 抽象事件类
ItemEvent 选择事件 TextEvent 文本框事件
图6.9 AWTEvent事件类的层次结构
6.2.3 事件类的接口
表6.1 事件类、对应的接口及接口中的方法
事件类/接口名称 ComponentEvent 组件事件类 ComponentListener 组件事件接口 ContainerEvent 容器事件类 ContainerListener 接口中声明的方法 componentMoved(ComponentEvent e) componentHidden(ComponentEvent e) componentResized(ComponentEvent e) componentShown(ComponentEvent e) componentAdded(ContainerEvent e) componentRemoved(ContainerEvent e) windowOpened(WindowEvent e) windowActivated(WindowEvent e) WindowEvent 窗口事件类 WindowListener 窗口事件接口 windowDeactivated(WindowEvent e) windowClosing(WindowEvent e) windowClosed(WindowEvent e) windowIconified(WindowEvent e) windowDeiconified(WindowEvent e) 产生事件的用户操作 移动组件时 隐藏组件时 改变组件大小时 显示组件时 添加组件时 移动组件时 打开窗口时 激活窗口时 窗口失去焦点时 关闭窗口时 关闭窗口后