JavaBeans
A simple AbstractBean
Just in case, here is a simple example of an AbstractBean class that can be used as a base class for JavaBeans if you want to use the Eclipse bouded setter plugin.
public abstract class AbstractBean {
/**
* Create a new change support
*/
protected PropertyChangeSupport change = new EDTSafePropertyChangeSupport(this);
/**
* @param listener
* @see java.beans.PropertyChangeSupport#addPropertyChangeListener(java.beans.PropertyChangeListener)
*/
public void addPropertyChangeListener(PropertyChangeListener listener) {
change.addPropertyChangeListener(listener);
}
/**
* @param propertyName
* @param listener
* @see java.beans.PropertyChangeSupport#addPropertyChangeListener(java.lang.String, java.beans.PropertyChangeListener)
*/
public void addPropertyChangeListener(String propertyName,
PropertyChangeListener listener) {
change.addPropertyChangeListener(propertyName, listener);
}
/**
* @param propertyName
* @param oldValue
* @param newValue
* @see java.beans.PropertyChangeSupport#firePropertyChange(java.lang.String, java.lang.Object, java.lang.Object)
*/
public void firePropertyChange(String propertyName, Object oldValue,
Object newValue) {
change.firePropertyChange(propertyName, oldValue, newValue);
}
/**
* @return
* @see java.beans.PropertyChangeSupport#getPropertyChangeListeners()
*/
public PropertyChangeListener[] getPropertyChangeListeners() {
return change.getPropertyChangeListeners();
}
/**
* @param propertyName
* @return
* @see java.beans.PropertyChangeSupport#getPropertyChangeListeners(java.lang.String)
*/
public PropertyChangeListener[] getPropertyChangeListeners(
String propertyName) {
return change.getPropertyChangeListeners(propertyName);
}
/**
* @param propertyName
* @return
* @see java.beans.PropertyChangeSupport#hasListeners(java.lang.String)
*/
public boolean hasListeners(String propertyName) {
return change.hasListeners(propertyName);
}
/**
* @param listener
* @see java.beans.PropertyChangeSupport#removePropertyChangeListener(java.beans.PropertyChangeListener)
*/
public void removePropertyChangeListener(PropertyChangeListener listener) {
change.removePropertyChangeListener(listener);
}
/**
* @param propertyName
* @param listener
* @see java.beans.PropertyChangeSupport#removePropertyChangeListener(java.lang.String, java.beans.PropertyChangeListener)
*/
public void removePropertyChangeListener(String propertyName,
PropertyChangeListener listener) {
change.removePropertyChangeListener(propertyName, listener);
}
/**
* Simply ensures that events are delivered through the event dispatching thread
*
*/
class EDTSafePropertyChangeSupport extends PropertyChangeSupport{
public EDTSafePropertyChangeSupport(Object sourceBean) {
super(sourceBean);
}
@Override
public void firePropertyChange(final PropertyChangeEvent evt) {
if(SwingUtilities.isEventDispatchThread()){
super.firePropertyChange(evt);
}else{
SwingUtilities.invokeLater(new Runnable() {
public void run() {
firePropertyChange(evt);
}
});
}
}
}
}
This implementation restricts itself to the firePropertyChange(String,Object,Object) method. It also provide a custom extension of PropertyChangeSupport that ensures that events are fired in the EventDispatchingThread.