org.eclipse.core.commands.common.EventManager
public abstract class EventManager {
private transient ListenerList listenerList = null;
...
}
在EventManager里面存储了所有的监听对象.
protected void firePropertyChange(final int propertyId) {
Object[] array = getListeners();
for (int nX = 0; nX < array.length; nX++) {
final IPropertyListener l = (IPropertyListener) array[nX];
try {
l.propertyChanged(WorkbenchPart.this, propertyId);
} catch (RuntimeException e) {
WorkbenchPlugin.log(e);
}
}
}
在属性发生改变的时候,需要调用firePropertyChange()方法,该方法会遍历所有的监听,并调用监听的处理事件propertyChanged()方法.
public interface IPropertyListener {
public void propertyChanged(Object source, int propId);
}
IPropertyListener就只有一个方法,表示,需要处理由特定属性propId的改变去做的响应.
在JavaBean中也有这个概念:
java.beans.PropertyChangeSupport {
addPropertyChangeListener();
firePropertyChange();
}
其实,这本来就是JavaBean的概念. JavaBean的传统应用领域就是UI领域.
而,目前,由于过多的Web UI的开发,使用的都是不带属性的组件.
具体的应用列子可以见:
不用线程实现更改ViewPart的TitleImage
http://lggege.iteye.com/blog/173840
JavaBean组件,的属性分4类:
- 简单类型, getter & setter & is
- 索引类型, 指对一个数组的索引取值方法, 如 getValueFromArray(int index) {return this.valueArray[index]; }
- 绑定类型, 就是PropertyChangeListener了, 就是UI领域应用最广.
- 约束类型, 就是说 属性改变了,需要对这个属性改变监听的 认可,该属性才可以改变.
与绑定类型区别,就是,绑定是改变后通知,而, 这个是改变前通知,并可否决改变.