# Class AbstractSpinnerModel

java.lang.Object
javax.swing.AbstractSpinnerModel

All Implemented Interfaces:
  `Serializable, SpinnerModel`

Direct Known Subclasses:
  `SpinnerDateModel, SpinnerListModel, SpinnerNumberModel`

public abstract class AbstractSpinnerModel extends Object implements SpinnerModel, Serializable
This class provides the ChangeListener part of the SpinnerModel interface that should be suitable for most concrete SpinnerModel implementations. Subclasses must provide an implementation of the `setValue`, `getValue`, `getNextValue` and `getPreviousValue` methods.

Since:
  1.4
See Also:
  - `JSpinner`
  - `SpinnerModel`
  - `SpinnerListModel`
  - `SpinnerNumberModel`
  - `SpinnerDateModel`

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `protected EventListenerList`
  `listenerList`
  The list of ChangeListeners for this model.

- ## Constructor Summary

  Constructors
  Modifier
  Constructor
  Description
  `protected`
  `AbstractSpinnerModel()`
  Constructor for subclasses to call.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `addChangeListener(ChangeListener l)`
  Adds a ChangeListener to the model's listener list.
  `protected void`
  `fireStateChanged()`
  Run each ChangeListeners stateChanged() method.
  `ChangeListener[]`
  `getChangeListeners()`
  Returns an array of all the `ChangeListener`s added to this AbstractSpinnerModel with addChangeListener().
  `<T extends EventListener>
  T[]`
  `getListeners(Class<T> listenerType)`
  Return an array of all the listeners of the given type that were added to this model.
  `void`
  `removeChangeListener(ChangeListener l)`
  Removes a ChangeListener from the model's listener list.

  ### Methods declared in class Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`
  Modifier and Type
  Method
  Description
  `protected Object`
  `clone()`
  Creates and returns a copy of this object.
  `boolean`
  `equals(Object obj)`
  Indicates whether some other object is "equal to" this one.
  `protected void`
  `finalize()`
  Deprecated, for removal: This API element is subject to removal in a future version.
  Finalization is deprecated and subject to removal in a future release.
  `final Class<?>`
  `getClass()`
  Returns the runtime class of this `Object`.
  `int`
  `hashCode()`
  Returns a hash code value for this object.
  `final void`
  `notify()`
  Wakes up a single thread that is waiting on this object's monitor.
  `final void`
  `notifyAll()`
  Wakes up all threads that are waiting on this object's monitor.
  `String`
  `toString()`
  Returns a string representation of the object.
  `final void`
  `wait()`
  Causes the current thread to wait until it is awakened, typically by being notified or interrupted.
  `final void`
  `wait(long timeoutMillis)`
  Causes the current thread to wait until it is awakened, typically by being notified or interrupted, or until a certain amount of real time has elapsed.
  `final void`
  `wait(long timeoutMillis, int nanos)`
  Causes the current thread to wait until it is awakened, typically by being notified or interrupted, or until a certain amount of real time has elapsed.

  ### Methods declared in interface SpinnerModel

  `getNextValue, getPreviousValue, getValue, setValue`
  Modifier and Type
  Method
  Description
  `Object`
  `getNextValue()`
  Return the object in the sequence that comes after the object returned by `getValue()`.
  `Object`
  `getPreviousValue()`
  Return the object in the sequence that comes before the object returned by `getValue()`.
  `Object`
  `getValue()`
  The current element of the sequence.
  `void`
  `setValue(Object value)`
  Changes current value of the model, typically this value is displayed by the `editor` part of a `JSpinner`.

- ## Field Details

  - ### listenerList

    protected EventListenerList listenerList
    The list of ChangeListeners for this model. Subclasses may store their own listeners here.

- ## Constructor Details

  - ### AbstractSpinnerModel

    protected AbstractSpinnerModel()
    Constructor for subclasses to call.

- ## Method Details

  - ### addChangeListener

    public void addChangeListener(ChangeListener l)
    Adds a ChangeListener to the model's listener list. The ChangeListeners must be notified when the models value changes.
    Specified by:
      `addChangeListener` in interface `SpinnerModel`
    Parameters:
      `l` - the ChangeListener to add
    See Also:
      - `removeChangeListener(ChangeListener)`
      - `SpinnerModel.addChangeListener(ChangeListener)`

  - ### removeChangeListener

    public void removeChangeListener(ChangeListener l)
    Removes a ChangeListener from the model's listener list.
    Specified by:
      `removeChangeListener` in interface `SpinnerModel`
    Parameters:
      `l` - the ChangeListener to remove
    See Also:
      - `addChangeListener(ChangeListener)`
      - `SpinnerModel.removeChangeListener(ChangeListener)`

  - ### getChangeListeners

    public ChangeListener[] getChangeListeners()
    Returns an array of all the `ChangeListener`s added to this AbstractSpinnerModel with addChangeListener().
    Returns:
      all of the `ChangeListener`s added or an empty array if no listeners have been added
    Since:
      1.4

  - ### fireStateChanged

    protected void fireStateChanged()
    Run each ChangeListeners stateChanged() method.
    See Also:
      - `SpinnerModel.setValue(Object)`
      - `EventListenerList`

  - ### getListeners

    public <T extends EventListener> T[] getListeners(Class<T> listenerType)
    Return an array of all the listeners of the given type that were added to this model. For example to find all of the ChangeListeners added to this model:

        myAbstractSpinnerModel.getListeners(ChangeListener.class);

    Type Parameters:
      `T` - the type of requested listeners
    Parameters:
      `listenerType` - the type of listeners to return, e.g. ChangeListener.class
    Returns:
      all of the objects receiving listenerType notifications from this model