|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||
java.lang.Objectorg.jdesktop.beans.AbstractBean
public abstract class AbstractBean
A convenience class from which to extend all non-visual AbstractBeans. It manages the PropertyChange notification system, making it relatively trivial to add support for property change events in getters/setters.
A non-visual java bean is a Java class that conforms to the AbstractBean patterns to allow visual manipulation of the bean's properties and event handlers at design-time.
Here is a simple example bean that contains one property, foo, and the proper pattern for implementing property change notification:
public class ABean extends AbstractBean {
private String foo;
public void setFoo(String newFoo) {
String old = getFoo();
this.foo = newFoo;
firePropertyChange("foo", old, getFoo());
}
public String getFoo() {
return foo;
}
}
You will notice that "getFoo()" is used in the setFoo method rather than accessing "foo" directly for the gets. This is done intentionally so that if a subclass overrides getFoo() to return, for instance, a constant value the property change notification system will continue to work properly.
The firePropertyChange method takes into account the old value and the new value. Only if the two differ will it fire a property change event. So you can be assured from the above code fragment that a property change event will only occur if old is indeed different from getFoo()
AbstractBean also supports vetoable
PropertyChangeEvent events. These events are similar to
PropertyChange events, except a special exception can be used
to veto changing the property. For example, perhaps the property is changing
from "fred" to "red", but a listener deems that "red" is unexceptable. In
this case, the listener can fire a veto exception and the property must
remain "fred". For example:
public class ABean extends AbstractBean {
private String foo;
public void setFoo(String newFoo) throws PropertyVetoException {
String old = getFoo();
this.foo = newFoo;
fireVetoableChange("foo", old, getFoo());
}
public String getFoo() {
return foo;
}
}
public class Tester {
public static void main(String... args) {
try {
ABean a = new ABean();
a.setFoo("fred");
a.addVetoableChangeListener(new VetoableChangeListener() {
public void vetoableChange(PropertyChangeEvent evt) throws PropertyVetoException {
if ("red".equals(evt.getNewValue()) {
throw new PropertyVetoException("Cannot be red!", evt);
}
}
}
a.setFoo("red");
} catch (Exception e) {
e.printStackTrace(); // this will be executed
}
}
}
AbstractBean is not Serializable. Special care must
be taken when creating Serializable subclasses, as the
Serializable listeners will not be saved. Subclasses will need to
manually save the serializable listeners. The AbstractSerializableBean
is Serializable and already handles the listeners correctly. If
possible, it is recommended that Serializable beans should extend
AbstractSerializableBean. If it is not possible, the
AbstractSerializableBean bean implementation provides details on
how to correctly serialize an AbstractBean subclass.
AbstractSerializableBean| Method Summary | |
|---|---|
void |
addPropertyChangeListener(java.beans.PropertyChangeListener listener)
Add a PropertyChangeListener to the listener list. |
void |
addPropertyChangeListener(java.lang.String propertyName,
java.beans.PropertyChangeListener listener)
Add a PropertyChangeListener for a specific property. |
void |
addVetoableChangeListener(java.lang.String propertyName,
java.beans.VetoableChangeListener listener)
Add a VetoableChangeListener for a specific property. |
void |
addVetoableChangeListener(java.beans.VetoableChangeListener listener)
Add a VetoableListener to the listener list. |
java.lang.Object |
clone()
|
java.beans.PropertyChangeListener[] |
getPropertyChangeListeners()
Returns an array of all the listeners that were added to the PropertyChangeSupport object with addPropertyChangeListener(). |
java.beans.PropertyChangeListener[] |
getPropertyChangeListeners(java.lang.String propertyName)
Returns an array of all the listeners which have been associated with the named property. |
java.beans.VetoableChangeListener[] |
getVetoableChangeListeners()
Returns the list of VetoableChangeListeners. |
java.beans.VetoableChangeListener[] |
getVetoableChangeListeners(java.lang.String propertyName)
Returns an array of all the listeners which have been associated with the named property. |
void |
removePropertyChangeListener(java.beans.PropertyChangeListener listener)
Remove a PropertyChangeListener from the listener list. |
void |
removePropertyChangeListener(java.lang.String propertyName,
java.beans.PropertyChangeListener listener)
Remove a PropertyChangeListener for a specific property. |
void |
removeVetoableChangeListener(java.lang.String propertyName,
java.beans.VetoableChangeListener listener)
Remove a VetoableChangeListener for a specific property. |
void |
removeVetoableChangeListener(java.beans.VetoableChangeListener listener)
Remove a VetoableChangeListener from the listener list. |
| Methods inherited from class java.lang.Object |
|---|
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Method Detail |
|---|
public final void addPropertyChangeListener(java.beans.PropertyChangeListener listener)
listener is null, no exception is thrown and no action
is taken.
listener - The PropertyChangeListener to be addedpublic final void removePropertyChangeListener(java.beans.PropertyChangeListener listener)
listener was added more than once to the same event
source, it will be notified one less time after being removed.
If listener is null, or was never added, no exception is
thrown and no action is taken.
listener - The PropertyChangeListener to be removedpublic final java.beans.PropertyChangeListener[] getPropertyChangeListeners()
If some listeners have been added with a named property, then
the returned array will be a mixture of PropertyChangeListeners
and PropertyChangeListenerProxys. If the calling
method is interested in distinguishing the listeners then it must
test each element to see if it's a
PropertyChangeListenerProxy, perform the cast, and examine
the parameter.
PropertyChangeListener[] listeners = bean.getPropertyChangeListeners();
for (int i = 0; i < listeners.length; i++) {
if (listeners[i] instanceof PropertyChangeListenerProxy) {
PropertyChangeListenerProxy proxy =
(PropertyChangeListenerProxy)listeners[i];
if (proxy.getPropertyName().equals("foo")) {
// proxy is a PropertyChangeListener which was associated
// with the property named "foo"
}
}
}
PropertyChangeListeners added or an
empty array if no listeners have been addedPropertyChangeListenerProxy
public final void addPropertyChangeListener(java.lang.String propertyName,
java.beans.PropertyChangeListener listener)
propertyName or listener is null, no
exception is thrown and no action is taken.
propertyName - The name of the property to listen on.listener - The PropertyChangeListener to be added
public final void removePropertyChangeListener(java.lang.String propertyName,
java.beans.PropertyChangeListener listener)
listener was added more than once to the same event
source for the specified property, it will be notified one less time
after being removed.
If propertyName is null, no exception is thrown and no
action is taken.
If listener is null, or was never added for the specified
property, no exception is thrown and no action is taken.
propertyName - The name of the property that was listened on.listener - The PropertyChangeListener to be removedpublic final java.beans.PropertyChangeListener[] getPropertyChangeListeners(java.lang.String propertyName)
propertyName - The name of the property being listened to
PropertyChangeListeners associated with
the named property. If no such listeners have been added,
or if propertyName is null, an empty array is
returned.public final void addVetoableChangeListener(java.beans.VetoableChangeListener listener)
listener is null, no exception is thrown and no action
is taken.
listener - The VetoableChangeListener to be addedpublic final void removeVetoableChangeListener(java.beans.VetoableChangeListener listener)
listener was added more than once to the same event
source, it will be notified one less time after being removed.
If listener is null, or was never added, no exception is
thrown and no action is taken.
listener - The VetoableChangeListener to be removedpublic final java.beans.VetoableChangeListener[] getVetoableChangeListeners()
public final void addVetoableChangeListener(java.lang.String propertyName,
java.beans.VetoableChangeListener listener)
propertyName or listener is null, no
exception is thrown and no action is taken.
propertyName - The name of the property to listen on.listener - The VetoableChangeListener to be added
public final void removeVetoableChangeListener(java.lang.String propertyName,
java.beans.VetoableChangeListener listener)
listener was added more than once to the same event
source for the specified property, it will be notified one less time
after being removed.
If propertyName is null, no exception is thrown and no
action is taken.
If listener is null, or was never added for the specified
property, no exception is thrown and no action is taken.
propertyName - The name of the property that was listened on.listener - The VetoableChangeListener to be removedpublic final java.beans.VetoableChangeListener[] getVetoableChangeListeners(java.lang.String propertyName)
propertyName - The name of the property being listened to
VetoableChangeListeners associated with
the named property. If no such listeners have been added,
or if propertyName is null, an empty array is
returned.
public java.lang.Object clone()
throws java.lang.CloneNotSupportedException
clone in class java.lang.Objectjava.lang.CloneNotSupportedException
|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||