Class JComboBoxBinding<E,SS,TS>
- java.lang.Object
-
- org.jdesktop.beansbinding.Binding<SS,SV,TS,TV>
-
- org.jdesktop.beansbinding.AutoBinding<SS,List<E>,TS,List>
-
- org.jdesktop.swingbinding.JComboBoxBinding<E,SS,TS>
-
- Type Parameters:
E- the type of elements in the sourceListSS- the type of source object (on which the source property resolves toList)TS- the type of target object (on which the target property resolves toJComboBox)
public final class JComboBoxBinding<E,SS,TS> extends AutoBinding<SS,List<E>,TS,List>
Binds aListof objects to act as the items of aJComboBox. Each object in the sourceListis an item in theJComboBox. Instances ofJComboBoxBindingare obtained by calling one of thecreateJComboBoxBindingmethods in theSwingBindingsclass.Here is an example of creating a binding from a
ListofCountryobjects to aJComboBox:// create the country list Listcountries = createCountryList(); // create the binding from List to JComboBox JComboBoxBinding cb = SwingBindings.createJComboBoxBinding(READ, countries, jComboBox); // realize the binding cb.bind(); If the
Listis an instance ofObservableList, then changes to theListcontents (such as adding, removing or replacing an object) are reflected in theJComboBox. Important: Changing the contents of a non-observableListwhile it is participating in aJComboBoxBindingis unsupported, resulting in undefined behavior and possible exceptions.JComboBoxBindingrequires extra clarification on the operation of therefreshandsavemethods and the meaning of the update strategy. The target property of aJComboBoxBindingis not the targetJComboBoxproperty provided in the constructor, but rather a private synthetic property representing theListof objects to show in the targetJComboBox. This synthetic property is readable/writeable only when theJComboBoxBindingis bound and the targetJComboBoxproperty is readable with anon-nullvalue.It is this private synthetic property on which the
refreshandsavemethods operate; meaning that these methods simply cause syncing between the value of the sourceListproperty and the value of the synthetic target property (representing theListto be shown in the targetJComboBox). These methods do not, therefore, have anything to do with refreshing values in theJComboBox. Likewise, the update strategy, which simply controls whenrefreshandsaveare automatically called, also has nothing to do with refreshing values in theJComboBox.Note: At the current time, the
READ_WRITEupdate strategy is not useful forJComboBoxBinding. To prevent unwanted confusion,READ_WRITEis translated toREADbyJComboBoxBinding'sconstructor.JComboBoxBindingworks by installing a custom model on the targetJComboBox, as appropriate, to represent the sourceList. The model is installed on a targetJComboBoxwith the first succesful call torefreshwith thatJComboBoxas the target. Subsequent calls torefreshupdate the elements in this already-installed model. The model is uninstalled from a targetJComboBoxwhen either theJComboBoxBindingis unbound or when the targetJComboBoxproperty changes to no longer represent thatJComboBox. Note: When the model is uninstalled from aJComboBox, it is replaced with aDefaultComboBoxModel, in order to leave theJComboBoxfunctional.Some of the above is easier to understand with an example. Let's consider a
JComboBoxBinding(binding), with update strategyREAD, between a property representing aList(listP) and a property representing aJComboBox(jComboBoxP).listPandjComboBoxPboth start off readable, referring to anon-nullListandnon-nullJComboBoxrespectively. Let's look at what happens for each of a sequence of events:Sequence Event Result 1 explicit call to binding.bind()- synthetic target property becomes readable/writeable
-refresh()is called
- model is installed on targetJComboBox, representing list of objects2 listPchanges to a newList- refresh()is called
- model is updated with new list of objects3 jComboBoxPchanges to a newJComboBox- model is uninstalled from old JComboBox4 explicit call to binding.refresh()- model is installed on target JComboBox, representing list of objects5 listPchanges to a newList- refresh()is called
- model is updated with new list of objects6 explicit call to binding.unbind()- model is uninstalled from target JComboBoxNotice that in step 3, when the value of the
JComboBoxproperty changed, the newJComboBoxdid not automatically get the model with the elements applied to it. A change to the target value should not cause anAutoBindingto sync the target from the source. Step 4 forces a sync by explicitly callingrefresh. Alternatively, it could be caused by any other action that results in arefresh(for example, the source property changing value, or an explicit call tounbindfollowed bybind).In addition to binding the items of a
JComboBox, it is possible to bind to the selected item of aJComboBox. See the list of interesting swing properties in the package summary for more details.- Author:
- Shannon Hickey
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class org.jdesktop.beansbinding.AutoBinding
AutoBinding.UpdateStrategy
-
Nested classes/interfaces inherited from class org.jdesktop.beansbinding.Binding
Binding.CST, Binding.SyncFailure, Binding.SyncFailureType, Binding.ValueResult<V>
-
-
Constructor Summary
Constructors Modifier Constructor Description protectedJComboBoxBinding(AutoBinding.UpdateStrategy strategy, SS sourceObject, Property<SS,List<E>> sourceListProperty, TS targetObject, Property<TS,? extends JComboBox> targetJComboBoxProperty, String name)Constructs an instance ofJComboBoxBinding.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected voidbindImpl()Called byBinding.bind()to allow subclasses to initiate binding.protected voidunbindImpl()Called byBinding.unbind()to allow subclasses to uninitiate binding.-
Methods inherited from class org.jdesktop.beansbinding.AutoBinding
getUpdateStrategy, paramString, sourceChangedImpl, targetChangedImpl
-
Methods inherited from class org.jdesktop.beansbinding.Binding
addBindingListener, addPropertyChangeListener, addPropertyChangeListener, bind, bindUnmanaged, firePropertyChange, getBindingListeners, getConverter, getName, getPropertyChangeListeners, getPropertyChangeListeners, getSourceNullValue, getSourceObject, getSourceProperty, getSourceUnreadableValue, getSourceValueForTarget, getTargetNullValue, getTargetObject, getTargetProperty, getTargetValueForSource, getValidator, isBound, isManaged, isSourceUnreadableValueSet, notifySynced, notifySyncFailed, notifySyncWarning, refresh, refreshAndNotify, refreshAndNotifyUnmanaged, refreshUnmanaged, removeBindingListener, removePropertyChangeListener, removePropertyChangeListener, save, saveAndNotify, saveAndNotifyUnmanaged, saveUnmanaged, setConverter, setManaged, setSourceNullValue, setSourceObject, setSourceObjectUnmanaged, setSourceProperty, setSourceUnreadableValue, setTargetNullValue, setTargetObject, setTargetObjectUnmanaged, setTargetProperty, setValidator, throwIfBound, throwIfManaged, throwIfUnbound, toString, unbind, unbindUnmanaged, unsetSourceUnreadableValue
-
-
-
-
Constructor Detail
-
JComboBoxBinding
protected JComboBoxBinding(AutoBinding.UpdateStrategy strategy, SS sourceObject, Property<SS,List<E>> sourceListProperty, TS targetObject, Property<TS,? extends JComboBox> targetJComboBoxProperty, String name)
Constructs an instance ofJComboBoxBinding.- Parameters:
strategy- the update strategysourceObject- the source objectsourceListProperty- a property on the source object that resolves to theListof elementstargetObject- the target objecttargetJComboBoxProperty- a property on the target object that resolves to aJComboBoxname- a name for theJComboBoxBinding- Throws:
IllegalArgumentException- if the source property or target property isnull
-
-
Method Detail
-
bindImpl
protected void bindImpl()
Description copied from class:BindingCalled byBinding.bind()to allow subclasses to initiate binding. Subclasses typically need not installPropertyStateListenerson the source property and target property as they will be notified by calls toBinding.sourceChangedImpl(org.jdesktop.beansbinding.PropertyStateEvent)andBinding.targetChangedImpl(org.jdesktop.beansbinding.PropertyStateEvent)when the source and target properties change respectively.- Overrides:
bindImplin classAutoBinding<SS,List<E>,TS,List>- See Also:
Binding.unbindImpl()
-
unbindImpl
protected void unbindImpl()
Description copied from class:BindingCalled byBinding.unbind()to allow subclasses to uninitiate binding.- Overrides:
unbindImplin classAutoBinding<SS,List<E>,TS,List>- See Also:
Binding.bindImpl()
-
-