# Interface SpinnerModel

All Known Implementing Classes:
  `AbstractSpinnerModel, SpinnerDateModel, SpinnerListModel, SpinnerNumberModel`

public interface SpinnerModel
A model for a potentially unbounded sequence of object values. This model is similar to `ListModel` however there are some important differences:

- The number of sequence elements isn't necessarily bounded.
- The model doesn't support indexed random access to sequence elements. Only three sequence values are accessible at a time: current, next and previous.
- The current sequence element, can be set.

A `SpinnerModel` has three properties, only the first is read/write.

`value`
  The current element of the sequence.
`nextValue`
  The following element or null if `value` is the last element of the sequence.
`previousValue`
  The preceding element or null if `value` is the first element of the sequence.

When the `value` property changes, `ChangeListeners` are notified. `SpinnerModel` may choose to notify the `ChangeListeners` under other circumstances.

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

## Method Summary

Modifier and Type
Method
Description
`void`
`addChangeListener(ChangeListener l)`
Adds a `ChangeListener` to the model's listener list.
`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`
`removeChangeListener(ChangeListener l)`
Removes a `ChangeListener` from the model's listener list.
`void`
`setValue(Object value)`
Changes current value of the model, typically this value is displayed by the `editor` part of a `JSpinner`.

## Method Details

### getValue

Object getValue()
The current element of the sequence. This element is usually displayed by the `editor` part of a `JSpinner`.

Returns:
  the current spinner value.
See Also:
  - `setValue(Object)`

### setValue

void setValue(Object value)
Changes current value of the model, typically this value is displayed by the `editor` part of a `JSpinner`. If the `SpinnerModel` implementation doesn't support the specified value then an `IllegalArgumentException` is thrown. For example a `SpinnerModel` for numbers might only support values that are integer multiples of ten. In that case, `model.setValue(new Number(11))` would throw an exception.

Parameters:
  `value` - new value for the spinner
Throws:
  `IllegalArgumentException` - if `value` isn't allowed
See Also:
  - `getValue()`

### getNextValue

Object getNextValue()
Return the object in the sequence that comes after the object returned by `getValue()`. If the end of the sequence has been reached then return null. Calling this method does not effect `value`.

Returns:
  the next legal value or null if one doesn't exist
See Also:
  - `getValue()`
  - `getPreviousValue()`

### getPreviousValue

Object getPreviousValue()
Return the object in the sequence that comes before the object returned by `getValue()`. If the end of the sequence has been reached then return null. Calling this method does not effect `value`.

Returns:
  the previous legal value or null if one doesn't exist
See Also:
  - `getValue()`
  - `getNextValue()`

### addChangeListener

void addChangeListener(ChangeListener l)
Adds a `ChangeListener` to the model's listener list. The `ChangeListeners` must be notified when models `value` changes.

Parameters:
  `l` - the ChangeListener to add
See Also:
  - `removeChangeListener(ChangeListener)`

### removeChangeListener

void removeChangeListener(ChangeListener l)
Removes a `ChangeListener` from the model's listener list.

Parameters:
  `l` - the ChangeListener to remove
See Also:
  - `addChangeListener(ChangeListener)`