个人认为,java里面的事件的监听和处理是做得比较好的。而它结构的完美就不不是用语言来形容的了。在java里,接口的使用可以说是代表着一个人对java的理解和掌握程度。而那些所谓模式几乎全部是接口的使用,我在看模式的时候,常常花时间最多的地方就是接口的应用。接口使得安全的增强一个类的功能成为可能,并且提供了一个抽象的骨架实现。但是并非所有的接口里面都有骨架的,有的就是一个接口,剩下的就是注释了,这样的接口有什么用呢?如果你对java比较熟悉的话,相信你已经结识到了一些空的接口,比如Cloneable这个接口,它的作用无非就是表示了要复制的对象。没有这个接口你的程序注定要throw Exception。今天在看java事件驱动的时候,又结识到了一个空的接口类型EventListener。现在突然有个想法,是不是最基本的java类型都是空的接口来实现的呢?有空了在看程序把。
java里面的事件驱动的格式一般都是add***Listener(),remove***Listener()。我在写代码的时候也不是很关心这些事件的产生到底是怎么产生的。现在想想,每个事件必定要有个事件源,也就是EventSource,它的作用就是产生***ChangeEvent,这里的EventListener必定是每个事件事件都要实现的了,说是实现只是implements或者是extends一下就可以了,这些都不用我们来担心了,sun早就做好了这些的代码,我们可以查看,这里要说的是如果自己写一个大点的系统的话,难免是要来重新写事件驱动的代码,但是参考sun的这一套我们可以很方便的实现自己的事件发布,监听,处理等的操作。Event可以用sun提供的,事件的发布可能要我们来重新改写,但是如果仔细的阅读sun的代码,我们可以很容易的找到事件源的代码PropertyChangeEvent。, here's an overview of how event handling in the AWT works.
A listener object is an instance of a class that implements a special interface called (naturally enough) a listener interface.
An event source is an object that can register listener objects and send them event objects.
The event source sends out event objects to all registered listeners when that event occurs.
The listener objects will then use the information in the event object to determine their reaction to the event.
想我刚接触java的时候看到事件就是头晕,现在看来也不是很恐怖,它里面的最根本的一个就是PropertyChangeEvent(Object source, String propertyName, Object oldValue, Object newValue)这个构造函数。他的作用就是用来发布一个事件的属性发生了变化这样一个事件(PropertyChangeEvent),变化发出去就要靠另外一个class:PropertyChangeSupport。它里面充满了各种对事件进行处理的方法,仔细看看绝对对自己对java的理解有很大的帮助。它发布事件变化的方式很简单,就是firePropertyChange,有人称这种方式是广播的方式,还是很有道理的,你愿意关心我发布的信息,你就加一个Listener过来,它发布的是一个PropertyChangeEvent,在以后的监听事件中我们可以想到每个监听的肯定是一个PropertyChangeEvent或者它的一个字类的事件。我们所要作的就是按照Observer模式所说的做一个忠实的客户端,我们可以加一个监听事件来监听事件发生了变化,这里是sun我所发现的用Observer模式用的最彻底的地方(也许我的理解有误)。一个组件要想能够监听到事件的变化,就要设置add***Listener()这个方法。千万不要以为在java里面的所有的组件都是这样来实现的,java用了一个很恐怖的类把java里面所有的监听的接口都在这AWTEventMulticaster里面实现了,它提供了一些static的add,delete方法来为其他需要用到监听的组件来调用。这大概就是整个事件的流程,事件产生,发布,监听。头绪有点乱,还是对事件的机制不是很熟,以后成熟了再来修改。