com.jgoodies.binding.beans

Class PropertyConnector


public final class PropertyConnector
extends java.lang.Object

Keeps two Java Bean properties in synch. This connector supports bound and unbound, read-only and read-write properties. Write-only properties are not supported; connecting two read-only properties won't work; connecting two unbound properties doesn't make sense.

If one of the bean properties fires a property change, this connector will set the other to the same value. If a bean property is read-only, the PropertyConnector will not listen to the other bean's property and so won't update the read-only property. And if a bean does not provide support for bound properties, it won't be observed. The properties must be single value bean properties as described by the Java Bean Secification.

Constraints: the properties must be type compatible, i. e. values returned by one reader must be accepted by the other's writer, and vice versa.

Examples:

 // Connects a ValueModel and a JFormattedTextField
 JFormattedTextField textField = new JFormattedTextField();
 textField.setEditable(editable);
 PropertyConnector connector = 
     new PropertyConnector(valueModel, "value", textField, "value");
 connector.updateProperty2();

 // Connects the boolean property "selectable" with a component enablement
 JComboBox comboBox = new JComboBox();
 ...
 new PropertyConnector(mainModel, "selectable", comboBox, "enabled");
 
Version:
$Revision: 1.11 $
Author:
Karsten Lentzsch
See Also:
PropertyChangeEvent, PropertyChangeListener, PropertyDescriptor

Constructor Summary

PropertyConnector(Object bean1, String property1Name, Object bean2, String property2Name)
Constructs a PropertyConnector that synchronizes the two bound bean properties as specified by the given pairs of bean and associated property name.

Method Summary

static void
connect(Object bean1, String property1Name, Object bean2, String property2Name)
Synchronizes the two bound bean properties as specified by the given pairs of bean and associated property name.
Object
getBean1()
Returns the Java Bean that holds the first property.
Object
getBean2()
Returns the Java Bean that holds the first property.
String
getProperty1Name()
Returns the name of the first Java Bean property.
String
getProperty2Name()
Returns the name of the second Java Bean property.
void
release()
Removes the PropertyChangeHandler from the observed bean, if the bean is not null and if property changes are not observed.
void
updateProperty1()
Reads the value of the second bean property and sets it as new value of the first bean property.
void
updateProperty2()
Reads the value of the first bean property and sets it as new value of the second bean property.

Constructor Details

PropertyConnector

public PropertyConnector(Object bean1,
                         String property1Name,
                         Object bean2,
                         String property2Name)
Parameters:
bean1 - the bean that owns the first property
property1Name - the name of the first property
bean2 - the bean that owns the second property
property2Name - the name of the second property

Method Details

connect

public static void connect(Object bean1,
                           String property1Name,
                           Object bean2,
                           String property2Name)
Synchronizes the two bound bean properties as specified by the given pairs of bean and associated property name. If Bean1#property1Name changes it updates Bean2#property2Name and vice versa. If a bean does not provide support for bound properties, changes will not be observed. If a bean property is read-only, this connector will not listen to the other bean's property and so won't update the read-only property.
Parameters:
bean1 - the bean that owns the first property
property1Name - the name of the first property
bean2 - the bean that owns the second property
property2Name - the name of the second property

getBean1

public Object getBean1()
Returns the Java Bean that holds the first property.
Returns:
the Bean that holds the first property

getBean2

public Object getBean2()
Returns the Java Bean that holds the first property.
Returns:
the Bean that holds the first property

getProperty1Name

public String getProperty1Name()
Returns the name of the first Java Bean property.
Returns:
the name of the first property

getProperty2Name

public String getProperty2Name()
Returns the name of the second Java Bean property.
Returns:
the name of the second property

release

public void release()
Removes the PropertyChangeHandler from the observed bean, if the bean is not null and if property changes are not observed. This connector must not be used after calling #release.

To avoid memory leaks it is recommended to invoke this method, if the connected beans live much longer than this connector.

As an alternative you may use event listener lists in the connected beans that are implemented using WeakReference.

See Also:
java.lang.ref.WeakReference

updateProperty1

public void updateProperty1()
Reads the value of the second bean property and sets it as new value of the first bean property.

updateProperty2

public void updateProperty2()
Reads the value of the first bean property and sets it as new value of the second bean property.

Copyright © 2002-2007 JGoodies Karsten Lentzsch. All Rights Reserved.