com.jgoodies.binding.extras
Class SpinnerAdapterFactory

java.lang.Object
  extended by com.jgoodies.binding.extras.SpinnerAdapterFactory

public final class SpinnerAdapterFactory
extends java.lang.Object

A factory that vends SpinnerModel implementations that are bound to a ValueModel Can be used to bind a ValueModel to instances of JSpinner.

To keep the ValueModel and SpinnerModel synchronized, this class listens to changes in both sides and updates the other silently, i.e. without firing a duplicate change event.

Constraints: The ValueModel's type must be compatible with the type required by the referenced SpinnerModel. For example a SpinnerNumberModel requires Number values.

Note: This class is not yet part of the binary Binding library; it comes with the Binding distributions as an extra. The API is work in progress and may change without notice; this class may even be completely removed from future distributions. If you want to use this class, you may consider copying it into your codebase.

Example:

 // General Connection
 ValueModel levelModel = new PropertyAdapter(settings, "level", true);
 SpinnerModel spinnerModel = new SpinnerNumberModel(9, 5, 10, 1);
 SpinnerAdapterFactory.connect(levelModel, spinnerModel);
 JSpinner levelSpinner = new JSpinner(spinnerModel);
 
 // Short Form
 ValueModel levelModel = new PropertyAdapter(settings, "level", true);
 SpinnerNumberModel spinnerModel = SpinnerAdapterFactory.createNumberAdapter(levelModel, 5, 10, 1);
 JSpinner levelSpinner = new JSpinner(spinnerModel);
 

Version:
$Revision: 1.2 $
Author:
Karsten Lentzsch
See Also:
ValueModel, SpinnerModel, JSpinner

Method Summary
static void connect(com.jgoodies.binding.value.ValueModel valueModel, javax.swing.SpinnerModel spinnerModel)
          Connects the given ValueModel and SpinnerModel by synchronizing their values.
static javax.swing.SpinnerDateModel createDateAdapter(com.jgoodies.binding.value.ValueModel valueModel)
          Creates and returns a SpinnerDateModel bound to the given valueModel.
static javax.swing.SpinnerDateModel createDateAdapter(com.jgoodies.binding.value.ValueModel valueModel, java.lang.Comparable start, java.lang.Comparable end, int calendarField)
          Creates and returns a SpinnerDateModel that represents a sequence of dates and is bound to the given valueModel.
static javax.swing.SpinnerNumberModel createNumberAdapter(com.jgoodies.binding.value.ValueModel valueModel, int minValue, int maxValue, int step)
          Creates and returns a SpinnerNumberModel that is connected to the given ValueModel and that honors the specified minimum, maximum and step values.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Method Detail

createDateAdapter

public static javax.swing.SpinnerDateModel createDateAdapter(com.jgoodies.binding.value.ValueModel valueModel)
Creates and returns a SpinnerDateModel bound to the given valueModel. The calendarField is equal to Calendar.DAY_OF_MONTH; there are no start/end limits.

This method has not been tested.

Parameters:
valueModel - a Date typed model that holds the spinner value
Returns:
a SpinnerDateModel bound to the given valueModel without start and end limits using Calendar.DAY_OF_MONTH as calendar field

createDateAdapter

public static javax.swing.SpinnerDateModel createDateAdapter(com.jgoodies.binding.value.ValueModel valueModel,
                                                             java.lang.Comparable start,
                                                             java.lang.Comparable end,
                                                             int calendarField)
Creates and returns a SpinnerDateModel that represents a sequence of dates and is bound to the given valueModel. The dates are between start and end. The nextValue and previousValue methods compute elements of the sequence by advancing or reversing the current date value by the calendarField time unit. For a precise description of what it means to increment or decrement a Calendar field, see the add method in java.util.Calendar.

The start and end parameters can be null to indicate that the range doesn't have an upper or lower bound. If value or calendarField is null, or if both start and end are specified and mininum > maximum then an IllegalArgumentException is thrown. Similarly if (minimum <= value <= maximum) is false, an IllegalArgumentException is thrown.

This method has not been tested.

Parameters:
valueModel - a Date typed model that holds the spinner value
start - the first date in the sequence or null
end - the last date in the sequence or null
calendarField - one of
  • Calendar.ERA
  • Calendar.YEAR
  • Calendar.MONTH
  • Calendar.WEEK_OF_YEAR
  • Calendar.WEEK_OF_MONTH
  • Calendar.DAY_OF_MONTH
  • Calendar.DAY_OF_YEAR
  • Calendar.DAY_OF_WEEK
  • Calendar.DAY_OF_WEEK_IN_MONTH
  • Calendar.AM_PM
  • Calendar.HOUR
  • Calendar.HOUR_OF_DAY
  • Calendar.MINUTE
  • Calendar.SECOND
  • Calendar.MILLISECOND
Returns:
a SpinnerDateModel bound to the given valueModel using the specified start and end dates and calendar field.
Throws:
java.lang.IllegalArgumentException - if the valueModel's initial value or calendarField are null, if calendarField isn't valid, or if the following expression is false: (start <= value <= end).
See Also:
Calendar, Date

createNumberAdapter

public static javax.swing.SpinnerNumberModel createNumberAdapter(com.jgoodies.binding.value.ValueModel valueModel,
                                                                 int minValue,
                                                                 int maxValue,
                                                                 int step)
Creates and returns a SpinnerNumberModel that is connected to the given ValueModel and that honors the specified minimum, maximum and step values.

Parameters:
valueModel - a Number typed model that holds the spinner value
minValue - the lower bound of the spinner number
maxValue - the upper bound of the spinner number
step - used to increment and decrement the current value
Returns:
a SpinnerNumberModel that is connected to the given ValueModel

connect

public static void connect(com.jgoodies.binding.value.ValueModel valueModel,
                           javax.swing.SpinnerModel spinnerModel)
Connects the given ValueModel and SpinnerModel by synchronizing their values.

Parameters:
valueModel - provides a value
spinnerModel - the underlying SpinnerModel implementation
Throws:
java.lang.NullPointerException - if the subject or spinnerModel is null