Java 注册监听器的方法总结(自身类this+外部类+内部类+匿名内部类+适配器Adapter+一个组件注册多个监听器)
来源:互联网 发布:淘宝卖家月退款金额 编辑:程序博客网 时间:2024/05/22 03:46
Java 使用接口回调技术实现处理事件的过程,在Java中能触发事件源的对象,都调用addXXXListener(XXXListener listener)方法将某个对象注册为自己的监听器,参数listener是个接口,listener可以引用任何实现了该接口的类的所创建的对象,当事件源发生时,接口listener 立刻回调类实现的接口方法(接口的实现类包含了接口方法和非接口方法,接口只能调用接口方法,不能调用非接口方法)。
以下是注册监听器的几种常用方法:
1.自身类(this作为监听器)
package listener_This;/* * 自身类作为事件监听器 * 说明:点击按钮,程序退出 */import java.applet.Applet;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JButton;public class ThisClassEvent extends Applet implements ActionListener{public ThisClassEvent(){JButton jButton = new JButton("Exit");add(jButton);setVisible(true);jButton.addActionListener(this); //将自身类作为事件监听器绑定到jButton上, //注意这里 this 不能写成 new ThisClassEvent() }@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubSystem.exit(0); //程序正常退出}}
2.外部类作为监听器
package listener_Outer;/* * 外部类作为事件监听器 * 说明:创建外部监听器类OuterClassListener, * 将OuterClassListener的实例对象作为jButton的监听器 * 注意:使用外部类是值得推荐的,其优点是可以处理事件的代码和创建GUI的代码分离, * 缺点是在监听器类中无法之间访问组件(外部类可以与主类可以在同一个源文件) */import java.applet.Applet;import javax.swing.JButton;public class OuterClassEvent extends Applet{public OuterClassEvent(){JButton jButton = new JButton("Exit");add(jButton);setVisible(true);jButton.addActionListener(new OuterCalssListener());//将OuterClassListener的实例对象作为jButton的监听器}}
/***********外部类*************/
package listener_Outer;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;public class OuterCalssListener implements ActionListener{@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubSystem.exit(0);}}
3.内部类作为监听器
package listener_Inner;/* * 内部类作为监听器 * 说明:内部类作为监听器和外部类作为监听器在实现上并无太大差异,只是将监听器类定义在主类外部和内部的差别 */import java.applet.Applet;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JButton;public class InnerCalssEvent extends Applet{public InnerCalssEvent(){JButton jButton = new JButton("Exit");add(jButton);setVisible(true);jButton.addActionListener(new InnerClassListener()); //内部类InnerClassListener的对象作为监听器}class InnerClassListener implements ActionListener{@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubSystem.exit(0);}}}
4.匿名内部类作监听器
package listener_Anonymity;/* * 匿名内部类作为监听器 * 说明:匿名内部类的声明格式: * new 接口() | 父类构造器(参数) * { * //类体 * } * * 注意:一般 当事件处理方法public void actionPerformed(ActionEvent e) * 比较简单时用匿名内部类作为监听器,否则将影响程序的可读性 */import java.applet.Applet;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JButton;public class AnonymityClassEvent extends Applet{public AnonymityClassEvent(){JButton jButton = new JButton("Exit");add(jButton);setVisible(true);jButton.addActionListener(new ActionListener(){@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubSystem.exit(0);}}); }}
5.适配器作为监听器
package listener_Adapter;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import javax.swing.JFrame;/* * 事件适配器作监听器:当实现一个监听器接口时。必须实现接口中所有的方法,否则这个类就必须声明为abstract类。 * 有些监听器接口里面的方法比较多,如WindowListener(可以查看API),但是实际应用时往往不用实现所有的方法, * 这就要用到适配器Adapter,Adapter实现了监听器接口里面的所有方法,但实际上方法体都为空。所以在实际应用时可以 * 定义一个继承Adapter的类来作为监听器,而在这个继承Adapter的 类中,只需要实现所需的方法即可。 * * 下面的程序使用适配器WindowAdapter作为监听器,仅仅处理窗口关闭事件(单击窗口上的关闭按钮,程序退出,并打印“Exit”) */public class ListenerAdapter extends JFrame{public ListenerAdapter(String name){super(name); //调用JFrame 的构造器//初始化GUIsetBounds(100, 100, 200, 300);setVisible(true);addWindowListener(new MyAdapter() ); // 窗口注册监听器}//class MyAdapter extends WindowAdapter{//重写 windowClosing方法(WindowAdapter还实现了WindowListener的许多方法,这里只用到了windowClosing方法)@Overridepublic void windowClosing(WindowEvent e) {// TODO Auto-generated method stubSystem.exit(0);System.out.println("Exit!");}}public static void main(String[] args){ new ListenerAdapter("窗口适配器");}}
6.一个组件注册多个监听器
package listener_More;/* * 一个组件注册多个监听器,本程序用匿名内部类作为监听器
*当该事件被触发是,多个监听器都会响应 */import java.applet.Applet;import java.awt.Color;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JButton;public class MoreListener extends Applet{/** * */private static final long serialVersionUID = 1L;public MoreListener(){JButton jButton = new JButton("Change to Black!");add(jButton);setVisible(true);jButton.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubsetBackground(Color.black); //背景变黑}});jButton.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubSystem.out.println("BLACK"); //向屏幕打印“BLACK!”}});}}
- Java 注册监听器的方法总结(自身类this+外部类+内部类+匿名内部类+适配器Adapter+一个组件注册多个监听器)
- Java 注册监听器的方法总结(自身类this+外部类+内部类+匿名内部类+适配器Adapter+一个组件注册多个监听器)
- 嵌套类的this + Java监听器类添加四个方法(自身、内部类、外部类、匿名内部类)
- JAVA监听器添加的四种方式(自身、外部类、内部类、匿名类)
- JAVA监听器添加的四种方式(自身、外部类、内部类、匿名类)
- java内部类,内部类的共性,成员内部类,方法内部类匿名内部类,静态嵌套类,不解
- Java监听器的用法(一):内部类监听器
- Android 创建Listener监听器形式选择:匿名内部类?外部类?
- 使用匿名内部类定义窗口监听器
- 理解SWT监听器----匿名内部类
- Java基础----其他类的总结(二) 以及内部类和匿名内部类
- 监听器内部类(二)
- java 内部类、匿名内部类、嵌套类的使用
- JAVA程序设计(12.1)---- JFrame 监听器使用 内部类 匿名内部类 接口
- 外部类、内部类、匿名内部类之间关系模型
- 从零开始学Android之监听器实现监听动作的三种方式(匿名内部类,独立类,接口方式)
- 匿名类、内部类、匿名内部类
- 匿名类、内部类、匿名内部类
- 基于STK的卫星飞行轨迹仿真技术
- 蛇形数组
- 矩阵旋转
- html5的Video和audio标签学习笔记
- Fixed compiling bug ('unordered_map' file not found) under Apple.
- Java 注册监听器的方法总结(自身类this+外部类+内部类+匿名内部类+适配器Adapter+一个组件注册多个监听器)
- 转:关于日历实现代码里0x04bd8, 0x04ae0, 0x0a570的解释
- 欢乐派对 堆优化+邻接表
- MFC-CWinThread
- 硅谷之所以骨子里与众不同,是因为有这七件事
- 根据PID查询正在执行的SQL语句
- 导弹拦截 动态规划
- 不必太羡慕别人
- 基于STK的卫星通信视景仿真