javax.swing

## Class JSpinner.DefaultEditor

- java.lang.Object
- - java.awt.Component
  - - java.awt.Container
    - - javax.swing.JComponent
      - - javax.swing.JPanel
        - - javax.swing.JSpinner.DefaultEditor

- All Implemented Interfaces:
    ImageObserver, LayoutManager, MenuContainer, PropertyChangeListener, Serializable, EventListener, Accessible, ChangeListener
  Direct Known Subclasses:
    JSpinner.DateEditor, JSpinner.ListEditor, JSpinner.NumberEditor
  Enclosing class:
    JSpinner

      public static class JSpinner.DefaultEditor
      extends JPanel
      implements ChangeListener, PropertyChangeListener, LayoutManager

  A simple base class for more specialized editors that displays a read-only view of the model's current value with a `JFormattedTextField`. Subclasses can configure the `JFormattedTextField` to create an editor that's appropriate for the type of model they support and they may want to override the `stateChanged` and `propertyChanged` methods, which keep the model and the text field in sync.

  This class defines a `dismiss` method that removes the editors `ChangeListener` from the `JSpinner` that it's part of. The `setEditor` method knows about `DefaultEditor.dismiss`, so if the developer replaces an editor that's derived from `JSpinner.DefaultEditor` its `ChangeListener` connection back to the `JSpinner` will be removed. However after that, it's up to the developer to manage their editor listeners. Similarly, if a subclass overrides `createEditor`, it's up to the subclasser to deal with their editor subsequently being replaced (with `setEditor`). We expect that in most cases, and in editor installed with `setEditor` or created by a `createEditor` override, will not be replaced anyway.

  This class is the `LayoutManager` for it's single `JFormattedTextField` child. By default the child is just centered with the parents insets.

  Since:
    1.4

- - ### Nested Class Summary

    - ### Nested classes/interfaces inherited from class javax.swing.JPanel

      `JPanel.AccessibleJPanel`

    - ### Nested classes/interfaces inherited from class javax.swing.JComponent

      `JComponent.AccessibleJComponent`

    - ### Nested classes/interfaces inherited from class java.awt.Container

      `Container.AccessibleAWTContainer`

    - ### Nested classes/interfaces inherited from class java.awt.Component

      `Component.AccessibleAWTComponent, Component.BaselineResizeBehavior, Component.BltBufferStrategy, Component.FlipBufferStrategy`

  - ### Field Summary

    - ### Fields inherited from class javax.swing.JComponent

      `listenerList, TOOL_TIP_TEXT_KEY, ui, UNDEFINED_CONDITION, WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, WHEN_FOCUSED, WHEN_IN_FOCUSED_WINDOW`

    - ### Fields inherited from class java.awt.Component

      `accessibleContext, BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT`

    - ### Fields inherited from interface java.awt.image.ImageObserver

      `ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH`

  - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `DefaultEditor(JSpinner spinner)` | Constructs an editor component for the specified `JSpinner`.

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `void` | `addLayoutComponent(String name, Component child)` | This `LayoutManager` method does nothing.
    `void` | `commitEdit()` | Pushes the currently edited value to the `SpinnerModel`.
    `void` | `dismiss(JSpinner spinner)` | Disconnect `this` editor from the specified `JSpinner`.
    `int` | `getBaseline(int width, int height)` | Returns the baseline.
    `Component.BaselineResizeBehavior` | `getBaselineResizeBehavior()` | Returns an enum indicating how the baseline of the component changes as the size changes.
    `JSpinner` | `getSpinner()` | Returns the `JSpinner` ancestor of this editor or `null` if none of the ancestors are a `JSpinner`.
    `JFormattedTextField` | `getTextField()` | Returns the `JFormattedTextField` child of this editor.
    `void` | `layoutContainer(Container parent)` | Resize the one (and only) child to completely fill the area within the parents insets.
    `Dimension` | `minimumLayoutSize(Container parent)` | Returns the minimum size of first (and only) child plus the size of the parents insets.
    `Dimension` | `preferredLayoutSize(Container parent)` | Returns the preferred size of first (and only) child plus the size of the parents insets.
    `void` | `propertyChange(PropertyChangeEvent e)` | Called by the `JFormattedTextField` `PropertyChangeListener`.
    `void` | `removeLayoutComponent(Component child)` | This `LayoutManager` method does nothing.
    `void` | `stateChanged(ChangeEvent e)` | This method is called when the spinner's model's state changes.

    - ### Methods inherited from class javax.swing.JPanel

      `getAccessibleContext, getUI, getUIClassID, paramString, setUI, updateUI`

    - ### Methods inherited from class javax.swing.JComponent

      `addAncestorListener, addNotify, addVetoableChangeListener, computeVisibleRect, contains, createToolTip, disable, enable, firePropertyChange, firePropertyChange, firePropertyChange, fireVetoableChange, getActionForKeyStroke, getActionMap, getAlignmentX, getAlignmentY, getAncestorListeners, getAutoscrolls, getBorder, getBounds, getClientProperty, getComponentGraphics, getComponentPopupMenu, getConditionForKeyStroke, getDebugGraphicsOptions, getDefaultLocale, getFontMetrics, getGraphics, getHeight, getInheritsPopupMenu, getInputMap, getInputMap, getInputVerifier, getInsets, getInsets, getListeners, getLocation, getMaximumSize, getMinimumSize, getNextFocusableComponent, getPopupLocation, getPreferredSize, getRegisteredKeyStrokes, getRootPane, getSize, getToolTipLocation, getToolTipText, getToolTipText, getTopLevelAncestor, getTransferHandler, getVerifyInputWhenFocusTarget, getVetoableChangeListeners, getVisibleRect, getWidth, getX, getY, grabFocus, hide, isDoubleBuffered, isLightweightComponent, isManagingFocus, isOpaque, isOptimizedDrawingEnabled, isPaintingForPrint, isPaintingOrigin, isPaintingTile, isRequestFocusEnabled, isValidateRoot, paint, paintBorder, paintChildren, paintComponent, paintImmediately, paintImmediately, print, printAll, printBorder, printChildren, printComponent, processComponentKeyEvent, processKeyBinding, processKeyEvent, processMouseEvent, processMouseMotionEvent, putClientProperty, registerKeyboardAction, registerKeyboardAction, removeAncestorListener, removeNotify, removeVetoableChangeListener, repaint, repaint, requestDefaultFocus, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, resetKeyboardActions, reshape, revalidate, scrollRectToVisible, setActionMap, setAlignmentX, setAlignmentY, setAutoscrolls, setBackground, setBorder, setComponentPopupMenu, setDebugGraphicsOptions, setDefaultLocale, setDoubleBuffered, setEnabled, setFocusTraversalKeys, setFont, setForeground, setInheritsPopupMenu, setInputMap, setInputVerifier, setMaximumSize, setMinimumSize, setNextFocusableComponent, setOpaque, setPreferredSize, setRequestFocusEnabled, setToolTipText, setTransferHandler, setUI, setVerifyInputWhenFocusTarget, setVisible, unregisterKeyboardAction, update`

    - ### Methods inherited from class java.awt.Container

      `add, add, add, add, add, addContainerListener, addImpl, addPropertyChangeListener, addPropertyChangeListener, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getComponentZOrder, getContainerListeners, getFocusTraversalKeys, getFocusTraversalPolicy, getLayout, getMousePosition, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusCycleRoot, isFocusTraversalPolicyProvider, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paintComponents, preferredSize, printComponents, processContainerEvent, processEvent, remove, remove, removeAll, removeContainerListener, setComponentZOrder, setFocusCycleRoot, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, setLayout, transferFocusDownCycle, validate, validateTree`

    - ### Methods inherited from class java.awt.Component

      `action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, bounds, checkImage, checkImage, coalesceEvents, contains, createImage, createImage, createVolatileImage, createVolatileImage, disableEvents, dispatchEvent, enable, enableEvents, enableInputMethods, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getBackground, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusCycleRootAncestor, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getForeground, getGraphicsConfiguration, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputContext, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocale, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getName, getParent, getPeer, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getToolkit, getTreeLock, gotFocus, handleEvent, hasFocus, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isPreferredSizeSet, isShowing, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, postEvent, prepareImage, prepareImage, processComponentEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processMouseWheelEvent, remove, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, resize, resize, setBounds, setBounds, setComponentOrientation, setCursor, setDropTarget, setFocusable, setFocusTraversalKeysEnabled, setIgnoreRepaint, setLocale, setLocation, setLocation, setName, setSize, setSize, show, show, size, toString, transferFocus, transferFocusBackward, transferFocusUpCycle`

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

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

- - ### Constructor Detail

    - #### DefaultEditor

          public DefaultEditor(JSpinner spinner)

      Constructs an editor component for the specified `JSpinner`. This `DefaultEditor` is it's own layout manager and it is added to the spinner's `ChangeListener` list. The constructor creates a single `JFormattedTextField` child, initializes it's value to be the spinner model's current value and adds it to `this` `DefaultEditor`.
      Parameters:
        `spinner` - the spinner whose model `this` editor will monitor
      See Also:
        `getTextField()`, `JSpinner.addChangeListener(javax.swing.event.ChangeListener)`

  - ### Method Detail

    - #### dismiss

          public void dismiss(JSpinner spinner)

      Disconnect `this` editor from the specified `JSpinner`. By default, this method removes itself from the spinners `ChangeListener` list.
      Parameters:
        `spinner` - the `JSpinner` to disconnect this editor from; the same spinner as was passed to the constructor.

    - #### getSpinner

          public JSpinner getSpinner()

      Returns the `JSpinner` ancestor of this editor or `null` if none of the ancestors are a `JSpinner`. Typically the editor's parent is a `JSpinner` however subclasses of `JSpinner` may override the the `createEditor` method and insert one or more containers between the `JSpinner` and it's editor.
      Returns:
        `JSpinner` ancestor; `null` if none of the ancestors are a `JSpinner`
      See Also:
        `JSpinner.createEditor(javax.swing.SpinnerModel)`

    - #### getTextField

          public JFormattedTextField getTextField()

      Returns the `JFormattedTextField` child of this editor. By default the text field is the first and only child of editor.
      Returns:
        the `JFormattedTextField` that gives the user access to the `SpinnerDateModel's` value.
      See Also:
        `getSpinner()`, `JSpinner.getModel()`

    - #### stateChanged

          public void stateChanged(ChangeEvent e)

      This method is called when the spinner's model's state changes. It sets the `value` of the text field to the current value of the spinners model.
      Specified by:
        `stateChanged` in interface `ChangeListener`
      Parameters:
        `e` - the `ChangeEvent` whose source is the `JSpinner` whose model has changed.
      See Also:
        `getTextField()`, `JSpinner.getValue()`

    - #### propertyChange

          public void propertyChange(PropertyChangeEvent e)

      Called by the `JFormattedTextField` `PropertyChangeListener`. When the `"value"` property changes, which implies that the user has typed a new number, we set the value of the spinners model.

      This class ignores `PropertyChangeEvents` whose source is not the `JFormattedTextField`, so subclasses may safely make `this` `DefaultEditor` a `PropertyChangeListener` on other objects.

      Specified by:
        `propertyChange` in interface `PropertyChangeListener`
      Parameters:
        `e` - the `PropertyChangeEvent` whose source is the `JFormattedTextField` created by this class.
      See Also:
        `getTextField()`

    - #### addLayoutComponent

          public void addLayoutComponent(String name,
                                         Component child)

      This `LayoutManager` method does nothing. We're only managing a single child and there's no support for layout constraints.
      Specified by:
        `addLayoutComponent` in interface `LayoutManager`
      Parameters:
        `name` - ignored
        `child` - ignored

    - #### removeLayoutComponent

          public void removeLayoutComponent(Component child)

      This `LayoutManager` method does nothing. There isn't any per-child state.
      Specified by:
        `removeLayoutComponent` in interface `LayoutManager`
      Parameters:
        `child` - ignored

    - #### preferredLayoutSize

          public Dimension preferredLayoutSize(Container parent)

      Returns the preferred size of first (and only) child plus the size of the parents insets.
      Specified by:
        `preferredLayoutSize` in interface `LayoutManager`
      Parameters:
        `parent` - the Container that's managing the layout
      Returns:
        the preferred dimensions to lay out the subcomponents of the specified container.
      See Also:
        `LayoutManager.minimumLayoutSize(java.awt.Container)`

    - #### minimumLayoutSize

          public Dimension minimumLayoutSize(Container parent)

      Returns the minimum size of first (and only) child plus the size of the parents insets.
      Specified by:
        `minimumLayoutSize` in interface `LayoutManager`
      Parameters:
        `parent` - the Container that's managing the layout
      Returns:
        the minimum dimensions needed to lay out the subcomponents of the specified container.
      See Also:
        `LayoutManager.preferredLayoutSize(java.awt.Container)`

    - #### layoutContainer

          public void layoutContainer(Container parent)

      Resize the one (and only) child to completely fill the area within the parents insets.
      Specified by:
        `layoutContainer` in interface `LayoutManager`
      Parameters:
        `parent` - the container to be laid out

    - #### commitEdit

          public void commitEdit()
                          throws ParseException

      Pushes the currently edited value to the `SpinnerModel`.

      The default implementation invokes `commitEdit` on the `JFormattedTextField`.

      Throws:
        `ParseException` - if the edited value is not legal

    - #### getBaseline

          public int getBaseline(int width,
                                 int height)

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

    - #### getBaselineResizeBehavior

          public Component.BaselineResizeBehavior getBaselineResizeBehavior()

      Returns an enum indicating how the baseline of the component changes as the size changes.
      Overrides:
        `getBaselineResizeBehavior` in class `JComponent`
      Returns:
        an enum indicating how the baseline changes as the component size changes
      Throws:
        `NullPointerException`
      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.