关于事件监听机制的总结(Listener和Adapter)
2014-12-13 17:20
531 查看
记得以前看过事件监听机制背后也是有一种设计模式的.(设计模式的名字记不清了,只记得背后实现的数据结构是数组.)
附上事件监听机制的分析图:
一个事件源可以承载多个事件(只要这个事件源支持这个事件就可以,男人就不支持生孩子的事件) 事件和监听器有对应关系的.
下面用awt中的标准图形化界面分析:
接口WindowListener 中有一个实现类WindowAdapter类.适配器类.
EventListener.java 下面是所有超级接口EventListener.java的源代码 其实就是一个空接口.
WindowListener.java 这个接口的源代码 定义了一些抽象方法
WindowAdapter.java这个实现类的源代码: WindowAdapter是一个抽象类.但是这个抽象类里面却没有抽象方法!!!!!!!
所有的方法都是空实现!!!空方法!!!
窗口事件的抽象适配器类(WindowAdapter).此类中的方法为空.此类存在的目的是方便创建监听器对象.
如果实现WindowListener 就要覆盖其中的所有抽象方法,但是继承WindowAdapter就不需要了,JDK为你定义好了这样的一个适配器类,
实现了所有WindowListener接口中的抽象方法.所以只需继承WindowAdapter类就可以了.需要什么方法就覆盖其中的方法.
EventListener是接口,WindowListener 也是接口,WindowAdapter是一个抽象类.
EventListener接口是一个空接口,WindowListener接口定义了一些公用的抽象方法,WindowAdapter是一个抽象类,但是里面没有任何的抽象方法.
要深入理解抽象类和接口的区别.
抽象类可以不含有抽象方法的!!!
因为这样有两个好处.
1.不让该类创建对象.
2.方便创建该接口的对象.
继承我这个抽象类,选择其中的一个方法去覆盖就可以了
在其中直接用匿名内部类就可以了.用哪个覆盖哪个.
给一个按钮增加一个活动监听.ActionListener
在Button类中有一个addActionListener(Listener l) 添加指定的动作侦听器,以接收发自此按钮的动作事件。
其中要传入一个ActionListener对象.看一下这个ActionListener对象
这个ActionListener对象有N多实现类,但是却不像WindowsLisntener一样有一个对应的适配器类.因为这个ActionListener接口中只有一个方法.
这就是一种原则,规则性的问题.
只要监听器中的方法超过两个一般都有一个对应的适配器,但是这个ActionListener接口中只有一个方法.
监听器中有两个或者两个以内方法的话没有对应适配器类的,创建本身就很方便.
addActionListener(ActionListener l)方法参数传递的是接口型引用,ActionListener本身方法又不多(就只有一个方法,只要覆写一个或者两个就可以了),
方法参数中用匿名内部类就可以了,这样表示看着更简洁明了.
窗体监听(WindowListener)和活动监听(ActionListener)
下面附上代码Demo
点击"右上角的×"和"一个按钮"都是关闭的效果.
附上事件监听机制的分析图:
一个事件源可以承载多个事件(只要这个事件源支持这个事件就可以,男人就不支持生孩子的事件) 事件和监听器有对应关系的.
下面用awt中的标准图形化界面分析:
接口WindowListener 中有一个实现类WindowAdapter类.适配器类.
EventListener.java 下面是所有超级接口EventListener.java的源代码 其实就是一个空接口.
package java.util; /** * A tagging interface that all event listener interfaces must extend. * @since JDK1.1 */ public interface EventListener { }
WindowListener.java 这个接口的源代码 定义了一些抽象方法
public interface WindowListener extends EventListener { /** * Invoked the first time a window is made visible. */ public void windowOpened(WindowEvent e); public void windowClosing(WindowEvent e); public void windowClosed(WindowEvent e); public void windowIconified(WindowEvent e); public void windowDeiconified(WindowEvent e); public void windowActivated(WindowEvent e); public void windowDeactivated(WindowEvent e); }
WindowAdapter.java这个实现类的源代码: WindowAdapter是一个抽象类.但是这个抽象类里面却没有抽象方法!!!!!!!
所有的方法都是空实现!!!空方法!!!
public abstract class WindowAdapter implements WindowListener, WindowStateListener, WindowFocusListener { /** * Invoked when a window has been opened. */ public void windowOpened(WindowEvent e) {} public void windowClosing(WindowEvent e) {} public void windowClosed(WindowEvent e) {} public void windowIconified(WindowEvent e) {} public void windowDeiconified(WindowEvent e) {} public void windowActivated(WindowEvent e) {} public void windowDeactivated(WindowEvent e) {} public void windowStateChanged(WindowEvent e) {} public void windowGainedFocus(WindowEvent e) {} /** * Invoked when the Window is no longer the focused Window, which means * that keyboard events will no longer be delivered to the Window or any of * its subcomponents. * * @since 1.4 */ public void windowLostFocus(WindowEvent e) {} }
窗口事件的抽象适配器类(WindowAdapter).此类中的方法为空.此类存在的目的是方便创建监听器对象.
如果实现WindowListener 就要覆盖其中的所有抽象方法,但是继承WindowAdapter就不需要了,JDK为你定义好了这样的一个适配器类,
实现了所有WindowListener接口中的抽象方法.所以只需继承WindowAdapter类就可以了.需要什么方法就覆盖其中的方法.
EventListener是接口,WindowListener 也是接口,WindowAdapter是一个抽象类.
EventListener接口是一个空接口,WindowListener接口定义了一些公用的抽象方法,WindowAdapter是一个抽象类,但是里面没有任何的抽象方法.
要深入理解抽象类和接口的区别.
抽象类可以不含有抽象方法的!!!
因为这样有两个好处.
1.不让该类创建对象.
2.方便创建该接口的对象.
继承我这个抽象类,选择其中的一个方法去覆盖就可以了
在其中直接用匿名内部类就可以了.用哪个覆盖哪个.
给一个按钮增加一个活动监听.ActionListener
在Button类中有一个addActionListener(Listener l) 添加指定的动作侦听器,以接收发自此按钮的动作事件。
其中要传入一个ActionListener对象.看一下这个ActionListener对象
这个ActionListener对象有N多实现类,但是却不像WindowsLisntener一样有一个对应的适配器类.因为这个ActionListener接口中只有一个方法.
这就是一种原则,规则性的问题.
只要监听器中的方法超过两个一般都有一个对应的适配器,但是这个ActionListener接口中只有一个方法.
监听器中有两个或者两个以内方法的话没有对应适配器类的,创建本身就很方便.
addActionListener(ActionListener l)方法参数传递的是接口型引用,ActionListener本身方法又不多(就只有一个方法,只要覆写一个或者两个就可以了),
方法参数中用匿名内部类就可以了,这样表示看着更简洁明了.
窗体监听(WindowListener)和活动监听(ActionListener)
下面附上代码Demo
import java.awt.Button; import java.awt.FlowLayout; import java.awt.Frame; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; public class FrameDemo { public static void main(String[] args) { Frame f = new Frame("my frame"); f.setBounds(400, 200, 500, 400); f.setLayout(new FlowLayout());//设置流式布局 Button but = new Button("一个按钮"); f.add(but);//将按钮添加到窗体中。 f.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { //System.out.println("closing......."+e); System.exit(0); } }); //在按钮上加上一个监听。 点击按钮"一个按钮"就关闭 but.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { //System.out.println("button run ....."); System.exit(0); } }); f.setVisible(true); System.out.println("over"); } }
点击"右上角的×"和"一个按钮"都是关闭的效果.
相关文章推荐
- java基础学习总结——关于Java中事件分发和监听机制实现的代码实例
- 黑马程序员_Java第22天知识总结_创建图形化界面_事件监听机制_双击执行的jar包
- js事件监听机制(事件捕获)总结
- Flex4.6事件监听机制的测试和总结-图文+源码
- js事件监听机制(事件捕获)总结
- 关于Java的事件监听机制,可以写一段好的代码吗?
- 基于监听的事件处理机制-----五种onClickListener实现方法
- 关于JAVA中事件分发和监听机制实现的代码实例-绝对原创实用
- Android开发中的UI事件监听处理机制总结 【转】
- Android监听底层事件的机制总结
- 关于JAVA中事件分发和监听机制实现的代码实例-绝对原创实用
- 事件监听:诀别Android繁琐的事件注册机制——view.setOnXXXXListener
- js事件监听机制(事件捕获)总结
- JSP事件监听机制(Listener)
- Android开发中的UI事件监听处理机制总结
- Android开发中的UI事件监听处理机制总结
- 自定义点击事件OnClickListener内部监听外部回调adapter内的点击事件移到Activity
- 再谈java事件监听机制
- 关于C#/.NET中委托和事件的机制和应用的故事(转)
- Spring中的IOC(四):IOC中其他接口的使用及Spring的事件处理机制(监听机制)