- All Implemented Interfaces:
ImageObserver
,MenuContainer
,Serializable
,Accessible
@JavaBean(defaultProperty="UI", description="A single line input field that lets the user select a number or an object value from an ordered set.") public class JSpinner extends JComponent implements Accessible
A JSpinner
's sequence value is defined by its
SpinnerModel
.
The model
can be specified as a constructor argument and
changed with the model
property. SpinnerModel
classes for some common types are provided: SpinnerListModel
,
SpinnerNumberModel
, and SpinnerDateModel
.
A JSpinner
has a single child component that's
responsible for displaying
and potentially changing the current element or value of
the model, which is called the editor
. The editor is created
by the JSpinner
's constructor and can be changed with the
editor
property. The JSpinner
's editor stays
in sync with the model by listening for ChangeEvent
s. If the
user has changed the value displayed by the editor
it is
possible for the model
's value to differ from that of
the editor
. To make sure the model
has the same
value as the editor use the commitEdit
method, eg:
try { spinner.commitEdit(); } catch (ParseException pe) { // Edited value is invalid, spinner.getValue() will return // the last valid value, you could revert the spinner to show that: JComponent editor = spinner.getEditor(); if (editor instanceof DefaultEditor) { ((DefaultEditor)editor).getTextField().setValue(spinner.getValue()); } // reset the value to some known value: spinner.setValue(fallbackValue); // or treat the last valid value as the current, in which // case you don't need to do anything. } return spinner.getValue();
For information and examples of using spinner see How to Use Spinners, a section in The Java Tutorial.
Warning: Swing is not thread safe. For more information see Swing's Threading Policy.
Warning:
Serialized objects of this class will not be compatible with
future Swing releases. The current serialization support is
appropriate for short term storage or RMI between applications running
the same version of Swing. As of 1.4, support for long term storage
of all JavaBeans™
has been added to the java.beans
package.
Please see XMLEncoder
.
- Since:
- 1.4
- See Also:
SpinnerModel
,AbstractSpinnerModel
,SpinnerListModel
,SpinnerNumberModel
,SpinnerDateModel
,JFormattedTextField
-
Nested Class Summary
Nested Classes Modifier and Type Class Description protected class
JSpinner.AccessibleJSpinner
AccessibleJSpinner
implements accessibility support for theJSpinner
class.static class
JSpinner.DateEditor
An editor for aJSpinner
whose model is aSpinnerDateModel
.static class
JSpinner.DefaultEditor
A simple base class for more specialized editors that displays a read-only view of the model's current value with aJFormattedTextField
.static class
JSpinner.ListEditor
An editor for aJSpinner
whose model is aSpinnerListModel
.static class
JSpinner.NumberEditor
An editor for aJSpinner
whose model is aSpinnerNumberModel
.Nested classes/interfaces declared in class java.awt.Component
Component.AccessibleAWTComponent, Component.BaselineResizeBehavior, Component.BltBufferStrategy, Component.FlipBufferStrategy
-
Field Summary
Fields declared in class javax.swing.JComponent
listenerList, TOOL_TIP_TEXT_KEY, ui, UNDEFINED_CONDITION, WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, WHEN_FOCUSED, WHEN_IN_FOCUSED_WINDOW
Fields declared in class java.awt.Component
accessibleContext, BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT
Fields declared in interface java.awt.image.ImageObserver
ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH
-
Constructor Summary
Constructors Constructor Description JSpinner()
Constructs a spinner with anInteger SpinnerNumberModel
with initial value 0 and no minimum or maximum limits.JSpinner(SpinnerModel model)
Constructs a spinner for the given model. -
Method Summary
Modifier and Type Method Description void
addChangeListener(ChangeListener listener)
Adds a listener to the list that is notified each time a change to the model occurs.void
commitEdit()
Commits the currently edited value to theSpinnerModel
.protected JComponent
createEditor(SpinnerModel model)
This method is called by the constructors to create theJComponent
that displays the current value of the sequence.protected void
fireStateChanged()
Sends aChangeEvent
, whose source is thisJSpinner
, to eachChangeListener
.AccessibleContext
getAccessibleContext()
Gets theAccessibleContext
for theJSpinner
ChangeListener[]
getChangeListeners()
Returns an array of all theChangeListener
s added to this JSpinner with addChangeListener().JComponent
getEditor()
Returns the component that displays and potentially changes the model's value.SpinnerModel
getModel()
Returns theSpinnerModel
that defines this spinners sequence of values.Object
getNextValue()
Returns the object in the sequence that comes after the object returned bygetValue()
.Object
getPreviousValue()
Returns the object in the sequence that comes before the object returned bygetValue()
.SpinnerUI
getUI()
Returns the look and feel (L&F) object that renders this component.String
getUIClassID()
Returns the suffix used to construct the name of the look and feel (L&F) class used to render this component.Object
getValue()
Returns the current value of the model, typically this value is displayed by theeditor
.void
removeChangeListener(ChangeListener listener)
Removes aChangeListener
from this spinner.void
setEditor(JComponent editor)
Changes theJComponent
that displays the current value of theSpinnerModel
.void
setModel(SpinnerModel model)
Changes the model that represents the value of this spinner.void
setUI(SpinnerUI ui)
Sets the look and feel (L&F) object that renders this component.void
setValue(Object value)
Changes current value of the model, typically this value is displayed by theeditor
.void
updateUI()
Resets the UI property with the value from the current look and feel.Methods declared in class javax.swing.JComponent
addAncestorListener, addNotify, addVetoableChangeListener, computeVisibleRect, contains, createToolTip, disable, enable, firePropertyChange, firePropertyChange, fireVetoableChange, getActionForKeyStroke, getActionMap, getAlignmentX, getAlignmentY, getAncestorListeners, getAutoscrolls, getBaseline, getBaselineResizeBehavior, 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, paramString, 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 declared in 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 declared in 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, 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, 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, requestFocus, requestFocus, requestFocusInWindow, resize, resize, setBounds, setBounds, setComponentOrientation, setCursor, setDropTarget, setFocusable, setFocusTraversalKeysEnabled, setIgnoreRepaint, setLocale, setLocation, setLocation, setMixingCutoutShape, setName, setSize, setSize, show, show, size, toString, transferFocus, transferFocusBackward, transferFocusUpCycle
-
Constructor Details
-
JSpinner
Constructs a spinner for the given model. The spinner has a set of previous/next buttons, and an editor appropriate for the model.- Parameters:
model
- a model for the new spinner- Throws:
NullPointerException
- if the model isnull
-
JSpinner
public JSpinner()Constructs a spinner with anInteger SpinnerNumberModel
with initial value 0 and no minimum or maximum limits.
-
-
Method Details
-
getUI
Returns the look and feel (L&F) object that renders this component.- Overrides:
getUI
in classJComponent
- Returns:
- the
SpinnerUI
object that renders this component
-
setUI
Sets the look and feel (L&F) object that renders this component.- Parameters:
ui
- theSpinnerUI
L&F object- See Also:
UIDefaults.getUI(javax.swing.JComponent)
-
getUIClassID
Returns the suffix used to construct the name of the look and feel (L&F) class used to render this component.- Overrides:
getUIClassID
in classJComponent
- Returns:
- the string "SpinnerUI"
- See Also:
JComponent.getUIClassID()
,UIDefaults.getUI(javax.swing.JComponent)
-
updateUI
public void updateUI()Resets the UI property with the value from the current look and feel.- Overrides:
updateUI
in classJComponent
- See Also:
UIManager.getUI(javax.swing.JComponent)
-
createEditor
This method is called by the constructors to create theJComponent
that displays the current value of the sequence. The editor may also allow the user to enter an element of the sequence directly. An editor must listen forChangeEvents
on themodel
and keep the value it displays in sync with the value of the model.Subclasses may override this method to add support for new
SpinnerModel
classes. Alternatively one can just replace the editor created here with thesetEditor
method. The default mapping from model type to editor is:-
SpinnerNumberModel => JSpinner.NumberEditor
-
SpinnerDateModel => JSpinner.DateEditor
-
SpinnerListModel => JSpinner.ListEditor
- all others =>
JSpinner.DefaultEditor
- Parameters:
model
- the value of getModel- Returns:
- a component that displays the current value of the sequence
- See Also:
getModel()
,setEditor(javax.swing.JComponent)
-
-
setModel
@BeanProperty(visualUpdate=true, description="Model that represents the value of this spinner.") public void setModel(SpinnerModel model)Changes the model that represents the value of this spinner. If the editor property has not been explicitly set, the editor property is (implicitly) set after the"model"
PropertyChangeEvent
has been fired. The editor property is set to the value returned bycreateEditor
, as in:setEditor(createEditor(model));
- Parameters:
model
- the newSpinnerModel
- Throws:
IllegalArgumentException
- if model isnull
- See Also:
getModel()
,getEditor()
,setEditor(javax.swing.JComponent)
-
getModel
Returns theSpinnerModel
that defines this spinners sequence of values.- Returns:
- the value of the model property
- See Also:
setModel(javax.swing.SpinnerModel)
-
getValue
Returns the current value of the model, typically this value is displayed by theeditor
. If the user has changed the value displayed by theeditor
it is possible for themodel
's value to differ from that of theeditor
, refer to the class level javadoc for examples of how to deal with this.This method simply delegates to the
model
. It is equivalent to:getModel().getValue()
- Returns:
- the current value of the model
- See Also:
setValue(java.lang.Object)
,SpinnerModel.getValue()
-
setValue
Changes current value of the model, typically this value is displayed by theeditor
. If theSpinnerModel
implementation doesn't support the specified value then anIllegalArgumentException
is thrown.This method simply delegates to the
model
. It is equivalent to:getModel().setValue(value)
- Parameters:
value
- new value for the spinner- Throws:
IllegalArgumentException
- ifvalue
isn't allowed- See Also:
getValue()
,SpinnerModel.setValue(java.lang.Object)
-
getNextValue
Returns the object in the sequence that comes after the object returned bygetValue()
. If the end of the sequence has been reached then returnnull
. Calling this method does not effectvalue
.This method simply delegates to the
model
. It is equivalent to:getModel().getNextValue()
- Returns:
- the next legal value or
null
if one doesn't exist - See Also:
getValue()
,getPreviousValue()
,SpinnerModel.getNextValue()
-
addChangeListener
Adds a listener to the list that is notified each time a change to the model occurs. The source ofChangeEvents
delivered toChangeListeners
will be thisJSpinner
. Note also that replacing the model will not affect listeners added directly to JSpinner. Applications can add listeners to the model directly. In that case is that the source of the event would be theSpinnerModel
.- Parameters:
listener
- theChangeListener
to add- See Also:
removeChangeListener(javax.swing.event.ChangeListener)
,getModel()
-
removeChangeListener
Removes aChangeListener
from this spinner.- Parameters:
listener
- theChangeListener
to remove- See Also:
fireStateChanged()
,addChangeListener(javax.swing.event.ChangeListener)
-
getChangeListeners
Returns an array of all theChangeListener
s added to this JSpinner 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()Sends aChangeEvent
, whose source is thisJSpinner
, to eachChangeListener
. When aChangeListener
has been added to the spinner, this method is called each time aChangeEvent
is received from the model. -
getPreviousValue
Returns the object in the sequence that comes before the object returned bygetValue()
. If the end of the sequence has been reached then returnnull
. Calling this method does not effectvalue
.This method simply delegates to the
model
. It is equivalent to:getModel().getPreviousValue()
- Returns:
- the previous legal value or
null
if one doesn't exist - See Also:
getValue()
,getNextValue()
,SpinnerModel.getPreviousValue()
-
setEditor
@BeanProperty(visualUpdate=true, description="JComponent that displays the current value of the model") public void setEditor(JComponent editor)Changes theJComponent
that displays the current value of theSpinnerModel
. It is the responsibility of this method to disconnect the old editor from the model and to connect the new editor. This may mean removing the old editorsChangeListener
from the model or the spinner itself and adding one for the new editor.- Parameters:
editor
- the new editor- Throws:
IllegalArgumentException
- if editor isnull
- See Also:
getEditor()
,createEditor(javax.swing.SpinnerModel)
,getModel()
-
getEditor
Returns the component that displays and potentially changes the model's value.- Returns:
- the component that displays and potentially changes the model's value
- See Also:
setEditor(javax.swing.JComponent)
,createEditor(javax.swing.SpinnerModel)
-
commitEdit
Commits the currently edited value to theSpinnerModel
.If the editor is an instance of
DefaultEditor
, the call if forwarded to the editor, otherwise this does nothing.- Throws:
ParseException
- if the currently edited value couldn't be committed.
-
getAccessibleContext
Gets theAccessibleContext
for theJSpinner
- Specified by:
getAccessibleContext
in interfaceAccessible
- Overrides:
getAccessibleContext
in classComponent
- Returns:
- the
AccessibleContext
for theJSpinner
- Since:
- 1.5
-