# Class BasicSpinnerUI

java.lang.Object
javax.swing.plaf.ComponentUI
javax.swing.plaf.SpinnerUI
javax.swing.plaf.basic.BasicSpinnerUI

Direct Known Subclasses:
  `SynthSpinnerUI`

public class BasicSpinnerUI extends SpinnerUI
The default Spinner UI delegate.

Since:
  1.4

## Field Summary

Fields
Modifier and Type
Field
Description
`protected JSpinner`
`spinner`
The spinner that we're a UI delegate for.

## Constructor Summary

Constructors
Constructor
Description
`BasicSpinnerUI()`
Constructs a `BasicSpinnerUI`.

## Method Summary

Modifier and Type
Method
Description
`protected JComponent`
`createEditor()`
This method is called by installUI to get the editor component of the `JSpinner`.
`protected LayoutManager`
`createLayout()`
Creates a `LayoutManager` that manages the `editor`, `nextButton`, and `previousButton` children of the JSpinner.
`protected Component`
`createNextButton()`
Creates an increment button, i.e. component that replaces the spinner value with the object returned by `spinner.getNextValue`.
`protected Component`
`createPreviousButton()`
Creates a decrement button, i.e. component that replaces the spinner value with the object returned by `spinner.getPreviousValue`.
`protected PropertyChangeListener`
`createPropertyChangeListener()`
Creates a `PropertyChangeListener` that can be added to the JSpinner itself.
`static ComponentUI`
`createUI(JComponent c)`
Returns a new instance of BasicSpinnerUI.
`int`
`getBaseline(JComponent c, int width, int height)`
Returns the baseline.
`Component.BaselineResizeBehavior`
`getBaselineResizeBehavior(JComponent c)`
Returns an enum indicating how the baseline of the component changes as the size changes.
`protected void`
`installDefaults()`
Initialize the `JSpinner` `border`, `foreground`, and `background`, properties based on the corresponding "Spinner.*" properties from defaults table.
`protected void`
`installKeyboardActions()`
Installs the keyboard Actions onto the JSpinner.
`protected void`
`installListeners()`
Initializes `PropertyChangeListener` with a shared object that delegates interesting PropertyChangeEvents to protected methods.
`protected void`
`installNextButtonListeners(Component c)`
Installs the necessary listeners on the next button, `c`, to update the `JSpinner` in response to a user gesture.
`protected void`
`installPreviousButtonListeners(Component c)`
Installs the necessary listeners on the previous button, `c`, to update the `JSpinner` in response to a user gesture.
`void`
`installUI(JComponent c)`
Calls `installDefaults`, `installListeners`, and then adds the components returned by `createNextButton`, `createPreviousButton`, and `createEditor`.
`protected void`
`replaceEditor(JComponent oldEditor, JComponent newEditor)`
Called by the `PropertyChangeListener` when the `JSpinner` editor property changes.
`protected void`
`uninstallDefaults()`
Sets the `JSpinner's` layout manager to null.
`protected void`
`uninstallListeners()`
Removes the `PropertyChangeListener` added by installListeners.
`void`
`uninstallUI(JComponent c)`
Calls `uninstallDefaults`, `uninstallListeners`, and then removes all of the spinners children.

### Methods declared in class javax.swing.plaf.ComponentUI

`contains, getAccessibleChild, getAccessibleChildrenCount, getMaximumSize, getMinimumSize, getPreferredSize, paint, update`

### Methods declared in class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

## Field Details

### spinner

protected JSpinner spinner
The spinner that we're a UI delegate for. Initialized by the `installUI` method, and reset to null by `uninstallUI`.

See Also:
  - `installUI(javax.swing.JComponent)`
  - `uninstallUI(javax.swing.JComponent)`

## Constructor Details

### BasicSpinnerUI

public BasicSpinnerUI()
Constructs a `BasicSpinnerUI`.

## Method Details

### createUI

public static ComponentUI createUI(JComponent c)
Returns a new instance of BasicSpinnerUI. SpinnerListUI delegates are allocated one per JSpinner.

Parameters:
  `c` - the JSpinner (not used)
Returns:
  a new BasicSpinnerUI object
See Also:
  - `ComponentUI.createUI(javax.swing.JComponent)`

### installUI

public void installUI(JComponent c)
Calls `installDefaults`, `installListeners`, and then adds the components returned by `createNextButton`, `createPreviousButton`, and `createEditor`.

Overrides:
  `installUI` in class `ComponentUI`
Parameters:
  `c` - the JSpinner
See Also:
  - `installDefaults()`
  - `installListeners()`
  - `createNextButton()`
  - `createPreviousButton()`
  - `createEditor()`

### uninstallUI

public void uninstallUI(JComponent c)
Calls `uninstallDefaults`, `uninstallListeners`, and then removes all of the spinners children.

Overrides:
  `uninstallUI` in class `ComponentUI`
Parameters:
  `c` - the JSpinner (not used)
See Also:
  - `ComponentUI.installUI(javax.swing.JComponent)`
  - `JComponent.updateUI()`

### installListeners

protected void installListeners()
Initializes `PropertyChangeListener` with a shared object that delegates interesting PropertyChangeEvents to protected methods.

This method is called by `installUI`.

See Also:
  - `replaceEditor(javax.swing.JComponent, javax.swing.JComponent)`
  - `uninstallListeners()`

### uninstallListeners

protected void uninstallListeners()
Removes the `PropertyChangeListener` added by installListeners.

This method is called by `uninstallUI`.

See Also:
  - `installListeners()`

### installDefaults

protected void installDefaults()
Initialize the `JSpinner` `border`, `foreground`, and `background`, properties based on the corresponding "Spinner.*" properties from defaults table. The `JSpinners` layout is set to the value returned by `createLayout`. This method is called by `installUI`.

See Also:
  - `uninstallDefaults()`
  - `installUI(javax.swing.JComponent)`
  - `createLayout()`
  - `LookAndFeel.installBorder(javax.swing.JComponent, java.lang.String)`
  - `LookAndFeel.installColors(javax.swing.JComponent, java.lang.String, java.lang.String)`

### uninstallDefaults

protected void uninstallDefaults()
Sets the `JSpinner's` layout manager to null. This method is called by `uninstallUI`.

See Also:
  - `installDefaults()`
  - `uninstallUI(javax.swing.JComponent)`

### installNextButtonListeners

protected void installNextButtonListeners(Component c)
Installs the necessary listeners on the next button, `c`, to update the `JSpinner` in response to a user gesture.

Parameters:
  `c` - Component to install the listeners on
Throws:
  `NullPointerException` - if `c` is null.
Since:
  1.5
See Also:
  - `createNextButton()`

### installPreviousButtonListeners

protected void installPreviousButtonListeners(Component c)
Installs the necessary listeners on the previous button, `c`, to update the `JSpinner` in response to a user gesture.

Parameters:
  `c` - Component to install the listeners on.
Throws:
  `NullPointerException` - if `c` is null.
Since:
  1.5
See Also:
  - `createPreviousButton()`

### createLayout

protected LayoutManager createLayout()
Creates a `LayoutManager` that manages the `editor`, `nextButton`, and `previousButton` children of the JSpinner. These three children must be added with a constraint that identifies their role: "Editor", "Next", and "Previous". The default layout manager can handle the absence of any of these children.

Returns:
  a LayoutManager for the editor, next button, and previous button.
See Also:
  - `createNextButton()`
  - `createPreviousButton()`
  - `createEditor()`

### createPropertyChangeListener

protected PropertyChangeListener createPropertyChangeListener()
Creates a `PropertyChangeListener` that can be added to the JSpinner itself. Typically, this listener will call replaceEditor when the "editor" property changes, since it's the `SpinnerUI's` responsibility to add the editor to the JSpinner (and remove the old one). This method is called by `installListeners`.

Returns:
  A PropertyChangeListener for the JSpinner itself
See Also:
  - `installListeners()`

### createPreviousButton

protected Component createPreviousButton()
Creates a decrement button, i.e. component that replaces the spinner value with the object returned by `spinner.getPreviousValue`. By default the `previousButton` is a `JButton`. If the decrement button is not needed this method should return `null`.

Returns:
  a component that will replace the spinner's value with the previous value in the sequence, or `null`
See Also:
  - `installUI(javax.swing.JComponent)`
  - `createNextButton()`
  - `installPreviousButtonListeners(java.awt.Component)`

### createNextButton

protected Component createNextButton()
Creates an increment button, i.e. component that replaces the spinner value with the object returned by `spinner.getNextValue`. By default the `nextButton` is a `JButton`. If the increment button is not needed this method should return `null`.

Returns:
  a component that will replace the spinner's value with the next value in the sequence, or `null`
See Also:
  - `installUI(javax.swing.JComponent)`
  - `createPreviousButton()`
  - `installNextButtonListeners(java.awt.Component)`

### createEditor

protected JComponent createEditor()
This method is called by installUI to get the editor component of the `JSpinner`. By default it just returns `JSpinner.getEditor()`. Subclasses can override `createEditor` to return a component that contains the spinner's editor or null, if they're going to handle adding the editor to the `JSpinner` in an `installUI` override.

Typically this method would be overridden to wrap the editor with a container with a custom border, since one can't assume that the editors border can be set directly.

The `replaceEditor` method is called when the spinners editor is changed with `JSpinner.setEditor`. If you've overridden this method, then you'll probably want to override `replaceEditor` as well.

Returns:
  the JSpinners editor JComponent, spinner.getEditor() by default
See Also:
  - `installUI(javax.swing.JComponent)`
  - `replaceEditor(javax.swing.JComponent, javax.swing.JComponent)`
  - `JSpinner.getEditor()`

### replaceEditor

protected void replaceEditor(JComponent oldEditor, JComponent newEditor)
Called by the `PropertyChangeListener` when the `JSpinner` editor property changes. It's the responsibility of this method to remove the old editor and add the new one. By default this operation is just:

     spinner.remove(oldEditor);
     spinner.add(newEditor, "Editor");

The implementation of `replaceEditor` should be coordinated with the `createEditor` method.

Parameters:
  `oldEditor` - an old instance of editor
  `newEditor` - a new instance of editor
See Also:
  - `createEditor()`
  - `createPropertyChangeListener()`

### installKeyboardActions

protected void installKeyboardActions()
Installs the keyboard Actions onto the JSpinner.

Since:
  1.5

### getBaseline

public int getBaseline(JComponent c, int width, int height)
Returns the baseline.

Overrides:
  `getBaseline` in class `ComponentUI`
Parameters:
  `c` - `JComponent` baseline is being requested for
  `width` - the width to get the baseline for
  `height` - the height to get the baseline for
Returns:
  baseline or a value < 0 indicating there is no reasonable baseline
Throws:
  `NullPointerException` - if `c` is `null`
  `IllegalArgumentException` - if width or height is < 0
Since:
  1.6
See Also:
  - `JComponent.getBaseline(int, int)`

### getBaselineResizeBehavior

public Component.BaselineResizeBehavior getBaselineResizeBehavior(JComponent c)
Returns an enum indicating how the baseline of the component changes as the size changes.

Overrides:
  `getBaselineResizeBehavior` in class `ComponentUI`
Parameters:
  `c` - `JComponent` to return baseline resize behavior for
Returns:
  an enum indicating how the baseline changes as the component size changes
Throws:
  `NullPointerException` - if `c` is `null`
Since:
  1.6
See Also:
  - `JComponent.getBaseline(int, int)`