先讲一个简单的例子。点击屏幕上的按钮,将文本框的内容传到服务器上。如果是基于 web,这个很容易实现;但假如是基于桌面应用,该如何实现呢?
从观察者的模式思考,当点击按钮,按钮的状态发生变化时,将通知它的观察者,也即EventListener,观察者取得文本框的值,然后将值传给后台。
在Swing中,有相关的几个概念:
Event:事件。Event有两种,一种是前台事件,一种是后台事件
前台事件 - 这些事件需要用户直接互动。在图形用户界面中的图形组件交互的人产生的后果。例如,点击一个按钮,移动鼠标,通过键盘输入一个字符,从列表中选择一个项目,滚动页面等
后台事件 - 这些事件,需要最终用户的交互是已知的作为背景的事件。操作系统的中断,硬件或软件故障,定时器到期时,操作完成的背景事件的例子。
EventListener
内部类是处理来自用户界面的事件的一种更常见方法。EventHandler
类只处理可能使用内部类的事件的子集。不过,EventHandler
使用长期持久方案要比使用内部类更有效。同样,在同一接口被实现很多次的大型应用程序中,使用 EventHandler
可以减少应用程序的磁盘和内存占用。
EventAdapter 用空方法实现了EventListener接口,这样在写EventListner时,不用再实现EventListner的全部方法,只需重写需要的方法就可以了。
EventHandler 通常是建立从用户界面 bean(事件 source)到应用程序逻辑 bean(target)的连接。大多数这类有效连接隔离了应用程序逻辑与用户界面。例如,用于从 JCheckBox
到接受 boolean 值的方法之间连接的 EventHandler
可以处理复选框状态的提取,以及处理将其直接传递给该方法,从而使该方法与用户界面层隔离。
参考文章:
http://docs.oracle.com/javase/tutorial/uiswing/events/generalrules.html
http://www.apihome.cn/api/java/EventHandler.html
http://www.yiibai.com/swing/swing_event_handling.html