Java Swing中的事件机制和观察者模式
Java Swing简述
Java Swing是Java 提供的一套关于用户图形界面(GUI)编程的工具包,如今已是Java基础类的一部分。其中包含图形化界面编程经常使用的要素,例如:容器、组件(文本框、按钮、下拉菜单、表等)、布局等等。相比与传统的Java AWT,Java Swing拥有更好的平台移植性。java
做为一款GUI编程工具包,Java Swing或许如今远不如QT、MFC、HTML5等技术流行,可是在其中所包含的事件处理倒是几乎全部GUI编程中所共有的技术。由于GUI工具包不只须要提供优美的图形化组件,同时还须要可以与用户进行交互,而交互的核心就是事件处理编程
事件处理机制
事件处理机制是一种事件处理框架,其设计目的是把GUI交互动做(单击、菜单选择等)转变为调用相关的事件处理程序进行处理。JDK 1.1之后Java采起了受权处理机制(Delegation—based Model),事件源能够把在其自身全部可能发生的事件分别受权给不一样的事件处理者来处理。设计模式
------百度百科框架
事件机制的三个基本要素
事件(event) 一般是指某种类型的操做。例如单击了一次Button或者文本框中输入了一个字符,则单击、输入字符就是事件ide
事件源(Event Source):能够简单的将其理解为事件发生的源头,例如单击了一次Button,因为单击是在Button上发生的,因此Button就是事件发生源头,即事件源。在Swing中,一般包含了全部能交互的的组件函数
事件监听器(Listener):是事件处理机制的核心,定义了全部事件处理的相关逻辑。事件监听器的主要做用,是关注可能发生事件的对象(事件源),并在其发生了特定的事件后,能对其作出反应工具
事件监听机制与观察者模式之间的联系
从事件监听器(Listener)的做用上分析,监听器的功能就是可以感知到对象上发生了某个事件。换句话说,就是当事件源上发生了某个事件时,监听器但愿能被通知到,而且在获得通知后能对其作出相应的处理。而这实际上就是观察者模式中观察者所但愿的事情。所以,咱们能够很天然将监听者映射到观察者模式中观察者(Observer),那么事件源和事件就相应的映射到了观察者模式中的目标(Subject)。布局
下面就从源码上验证上述结论:this
Subject的一些必要条件lua
知道他的观察者。(维护观察者列表)
提供注册和删除观察者的接口
当状态发生变化时,向观察者发送通知
Observer的一些必要条件
当目标发生变化时,提供一个更新的接口(回调函数)
Swing中的组件类(等价于观察者中的Subject)
组件类在监听机制中就是事件源
(因为代码过长,只截取重要部分)
全部组件的父类JComponent
public abstract class JComponent extends Container implementsSerializable,
TransferHandler.HasGet