Mari Göransson - KaU - Datavetenskap - DAVD11 1 Java Beans - Events and Properties -
-
Upload
everett-jared-cook -
Category
Documents
-
view
216 -
download
2
Transcript of Mari Göransson - KaU - Datavetenskap - DAVD11 1 Java Beans - Events and Properties -
Mari Göransson - KaU - Datavetenskap - DAVD11
1
Java BeansJava BeansJava BeansJava Beans
- Events and Properties -- Events and Properties -
Mari Göransson - KaU - Datavetenskap - DAVD11
2
Properties• Simple properties• Bound properties• Constrained properties
Mari Göransson - KaU - Datavetenskap - DAVD11
3
Simple Properties• Named attributes that can be read
or written by calling appropriate methods on the JavaBean
• E.g. Getter: String getTextValue()• E.g. Setter: setTextValue(String)• -> property is textValue
Mari Göransson - KaU - Datavetenskap - DAVD11
4
Bound Properties• When changes to the property are
of interest to other beans.• The component provides a change
notification service: public void addPropertyChangeListener(PropertyChangeListener l) public void removePropertyChangeListener(PropertyChangeListener l)
Mari Göransson - KaU - Datavetenskap - DAVD11
5
Bound Properties• Mostly, the listeners are handled
by the class PropertyChangeSupport.
• When a change occurs a PropertyChangeEvent is fired containing the old and new value.
Mari Göransson - KaU - Datavetenskap - DAVD11
6
Constrained Properties• When a bean (listener) may want
to validate a change and reject the change if it is inappropriate.
Mari Göransson - KaU - Datavetenskap - DAVD11
7
Event-mechanism models
• The basic event-delegation mechanism is a specialized version of the Observer pattern.
• JavaBeans introduced another version of the observer pattern; the property change listener.
Mari Göransson - KaU - Datavetenskap - DAVD11
8
Java Event Handling and the Observer
Pattern• The observer pattern is used when
an object wants to be informed of a state change in another object.
• In java, the observer object listens for events to happen.
Mari Göransson - KaU - Datavetenskap - DAVD11
9
Java Event Handling and the Observer
Pattern
Mari Göransson - KaU - Datavetenskap - DAVD11
10
Java Event Handling and the Observer
Pattern
Mari Göransson - KaU - Datavetenskap - DAVD11
11
JavaBeans and Events
Mari Göransson - KaU - Datavetenskap - DAVD11
12
Property Change Listeners as Observers
• This is a closer representation of the Observer pattern: each observer listens for changes to an attribute in the subject and is informed when the state changes.
Mari Göransson - KaU - Datavetenskap - DAVD11
13
PropertyChangeListeners
• The registered set of listeners is managed within the PropertyChangeSupport class.
• When the watched property changes the support class informs all registered listeners of the old and new value.
Mari Göransson - KaU - Datavetenskap - DAVD11
14
Swing• The Swing components have a
similar event model where many of their properties are bound.
Mari Göransson - KaU - Datavetenskap - DAVD11
15
Bound Property Structure
source
<<use>>
changes
<<create>>
*
PropertyChangeSupport
+addPropertyChangeListener:+removePropertyChangeListener:+firePropertyChange:
SerializableMyJavaBean
+addPropertyChangeListener:+removePropertyChangeListener:+setData:
SerializableMyBoundPropertyListener
+propertyChange:
EventListenerinterface
PropertyChangeListener
EventObjectPropertyChangeEvent
+getPropertyName:String+getNewValue:Object+getOldValue:Object
Object
Or inherit from it
By the classesimplementingthe interface
Mari Göransson - KaU - Datavetenskap - DAVD11
16
Implementing Bound Property Support
• Import the java.beans package. This gives you access to the PropertyChangeSupport class.
Mari Göransson - KaU - Datavetenskap - DAVD11
17
Implementing Bound Property Support
• Instantiate a PropertyChangeSupport object:private PropertyChangeSupport changes =
new PropertyChangeSupport(this);
• This object maintains the property change listener list and fires property change events on your behalf.
Mari Göransson - KaU - Datavetenskap - DAVD11
18
Implementing Bound Property Support
• Implement methods to maintain the property change listener list. Since PropertyChangeSupport implements these methods, you merely wrap calls to the property-change support object's methods:
Mari Göransson - KaU - Datavetenskap - DAVD11
19
Implementing Bound Property Support
public void addPropertyChangeListener( PropertyChangeListener l){ changes.addPropertyChangeListener(l);}
public void removePropertyChangeListener( PropertyChangeListener l){ changes.removePropertyChangeListener(l);}
Mari Göransson - KaU - Datavetenskap - DAVD11
20
Implementing Bound Property Support
• Modify a property's setter method to fire a property change event when the property is changed. Public void setText(String value){ String oldValue = text; text = value; changes.firePropertyChange(”text", oldValue, value);}
Mari Göransson - KaU - Datavetenskap - DAVD11
21
Implementing Bound Property Support
• The firePropertyChange method bundles its parameters into a PropertyChangeEvent object, and calls propertyChange(PropertyChangeEvent pce) on each registered listener.
Mari Göransson - KaU - Datavetenskap - DAVD11
22
Implementing Bound Property Listeners
• Implement the PropertyChangeListener interface.
• public class MyClass implements java.beans.PropertyChangeListener,
java.io.Serializable
Mari Göransson - KaU - Datavetenskap - DAVD11
23
Implementing Bound Property Listeners
• Implement the propertyChange method in the listener.
• public void propertyChange(PropertyChangeEvent e)
• Example taken from: http://java.sun.com/docs/books/tutorial/javabeans/properties/bound.html