BasicSpinnerUI (Java Platform SE 8 )
Keywords: javax.swing.plaf.basic.BasicSpinnerUI class
Date: 2026-08-19

javax.swing.plaf.basic

## 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 and Description
    --- | ---
    `protected JSpinner` | `spinner` The spinner that we're a UI delegate for.

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `BasicSpinnerUI()`

  - ### Method Summary

    All Methods Static Methods Instance Methods Concrete Methods
    Modifier and Type | Method and 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.
    `protected Component` | `createPreviousButton()` Creates a decrement button, i.e.
    `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 inherited from class javax.swing.plaf.ComponentUI

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

    - ### Methods inherited from class java.lang.Object

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

- - ### Field Detail

    - #### 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 Detail

    - #### BasicSpinnerUI

          public BasicSpinnerUI()

  - ### Method Detail

    - #### 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 overriden 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.
      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)`

Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2026, Oracle and/or its affiliates. All rights reserved. Use is subject to license terms. Also see the documentation redistribution policy.