java.lang.Object
java.awt.Component
java.awt.Container
javax.swing.JComponent
javax.swing.JSpinner
- 所有已实现的接口:
-
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
一个单行输入字段,允许用户从有序序列中选择数字或对象值。微调器通常提供一对微小的箭头按钮,用于逐个浏览序列的元素。键盘上/下箭头键也可以循环浏览元素。用户还可以直接在微调器中输入(合法)值。尽管组合框提供了类似的功能,但有时会更喜欢微调器,因为它们不需要可能会遮挡重要数据的下拉列表。
JSpinner
的序列值由其SpinnerModel
定义。可以将model
指定为构造函数参数,并使用model
属性更改。提供了一些常见类型的SpinnerModel
类: SpinnerListModel
、SpinnerNumberModel
和SpinnerDateModel
。
JSpinner
有一个负责显示和可能更改模型当前元素或值的单个子组件,称为editor
。编辑器由JSpinner
的构造函数创建,并可以使用editor
属性更改。JSpinner
的编辑器通过监听ChangeEvent
与模型保持同步。如果用户更改了editor
显示的值,则model
的值可能与editor
的值不同。要确保model
具有与编辑器相同的值,请使用commitEdit
方法,例如:
try { spinner.commitEdit(); } catch (ParseException pe) { // 编辑的值无效,spinner.getValue()将返回 // 上一个有效值,您可以恢复微调器以显示该值: JComponent editor = spinner.getEditor(); if (editor instanceof DefaultEditor) { ((DefaultEditor)editor).getTextField().setValue(spinner.getValue()); } // 重置值为某个已知值: spinner.setValue(fallbackValue); // 或将上一个有效值视为当前值,这种情况下您不需要执行任何操作。 } return spinner.getValue();
有关使用微调器的信息和示例,请参阅如何使用微调器,这是The Java Tutorial中的一个部分。
警告: Swing不是线程安全的。有关更多信息,请参阅Swing的线程策略。
警告: 该类的序列化对象将不兼容未来的Swing版本。当前的序列化支持适用于短期存储或在运行相同Swing版本的应用程序之间的RMI。从1.4开始,已将所有JavaBeans的长期存储支持添加到java.beans
包中。请参阅XMLEncoder
。
- 自版本:
- 1.4
- 参见:
-
Nested Class Summary
Modifier and TypeClassDescriptionprotected class
AccessibleJSpinner
为JSpinner
类实现了辅助功能支持。static class
一个JSpinner
的编辑器,其模型是SpinnerDateModel
。static class
一个更专业的编辑器的简单基类,显示JFormattedTextField
的模型当前值的只读视图。static class
一个JSpinner
的编辑器,其模型是SpinnerListModel
。static class
一个JSpinner
的编辑器,其模型是SpinnerNumberModel
。Nested classes/interfaces declared in class javax.swing.JComponent
JComponent.AccessibleJComponent
Nested classes/interfaces declared in class java.awt.Container
Container.AccessibleAWTContainer
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
ConstructorDescriptionJSpinner()
构造一个带有Integer SpinnerNumberModel
的微调器,初始值为0,没有最小或最大限制。JSpinner
(SpinnerModel model) 为给定的模型构造一个微调器。 -
Method Summary
Modifier and TypeMethodDescriptionvoid
addChangeListener
(ChangeListener listener) 向列表添加一个侦听器,每当模型发生更改时通知。void
将当前编辑的值提交给SpinnerModel
。protected JComponent
createEditor
(SpinnerModel model) 此方法由构造函数调用,用于创建显示序列当前值的JComponent
。protected void
向每个ChangeListener
发送一个源为此JSpinner
的ChangeEvent
。获取JSpinner
的AccessibleContext
。返回添加到此JSpinner的所有ChangeListener
的数组。返回显示并可能更改模型值的组件。getModel()
返回定义此微调器值序列的SpinnerModel
。返回getValue()
返回的对象之后的序列中的对象。返回getValue()
返回的对象之前的序列中的对象。getUI()
返回呈现此组件的外观(L&F)对象。返回用于构造用于呈现此组件的外观(L&F)类的名称的后缀。getValue()
返回模型的当前值,通常此值由editor
显示。void
removeChangeListener
(ChangeListener listener) 从此微调器中删除一个ChangeListener
。void
setEditor
(JComponent editor) 更改显示SpinnerModel
当前值的JComponent
。void
setModel
(SpinnerModel model) 更改表示此微调器值的模型。void
设置呈现此组件的外观(L&F)对象。void
更改模型的当前值,通常此值由editor
显示。void
updateUI()
使用当前外观的值重置UI属性。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
为给定的模型构造一个微调器。微调器具有一组上一个/下一个按钮,并且适用于该模型的编辑器。- 参数:
-
model
- 新微调器的模型 - 抛出:
-
NullPointerException
- 如果模型为null
-
JSpinner
public JSpinner()构造一个带有Integer SpinnerNumberModel
的微调器,初始值为0,没有最小或最大限制。
-
-
Method Details
-
getUI
返回呈现此组件的外观(L&F)对象。- 覆盖:
-
getUI
在类JComponent
- 返回:
-
渲染此组件的
SpinnerUI
对象
-
setUI
设置呈现此组件的外观(L&F)对象。- 参数:
-
ui
-SpinnerUI
L&F对象 - 参见:
-
getUIClassID
返回用于构造用于呈现此组件的外观(L&F)类的名称的后缀。- 覆盖:
-
getUIClassID
在类JComponent
- 返回:
- 字符串"SpinnerUI"
- 参见:
-
updateUI
public void updateUI()使用当前外观的值重置UI属性。- 覆盖:
-
updateUI
在类JComponent
- 参见:
-
createEditor
此方法由构造函数调用,用于创建显示序列当前值的JComponent
。编辑器还可以允许用户直接输入序列的元素。编辑器必须监听model
上的ChangeEvents
,并保持其显示的值与模型的值同步。子类可以重写此方法以添加对新
SpinnerModel
类的支持。或者可以使用setEditor
方法直接替换此处创建的编辑器。从模型类型到编辑器的默认映射为:SpinnerNumberModel => JSpinner.NumberEditor
SpinnerDateModel => JSpinner.DateEditor
SpinnerListModel => JSpinner.ListEditor
- 所有其他 =>
JSpinner.DefaultEditor
- 参数:
-
model
- getModel的值 - 返回:
- 显示序列当前值的组件
- 参见:
-
setModel
@BeanProperty(visualUpdate=true, description="Model that represents the value of this spinner.") public void setModel(SpinnerModel model) 更改表示此微调器值的模型。如果未明确设置编辑器属性,则在触发"model"
PropertyChangeEvent
后,编辑器属性将被(隐式)设置。编辑器属性设置为createEditor
返回的值,如下所示:setEditor(createEditor(model));
- 参数:
-
model
- 新的SpinnerModel
- 抛出:
-
IllegalArgumentException
- 如果模型为null
- 另请参见:
-
getModel
返回定义此微调器数值序列的SpinnerModel
。- 返回:
- 模型属性的值
- 另请参见:
-
getValue
返回模型的当前值,通常此值由editor
显示。如果用户更改了editor
显示的值,则model
的值可能与editor
的值不同,请参阅类级别的javadoc以了解如何处理此问题的示例。此方法简单地委托给
model
。等同于:getModel().getValue()
- 返回:
- 模型的当前值
- 另请参见:
-
setValue
更改模型的当前值,通常此值由editor
显示。如果SpinnerModel
实现不支持指定的值,则会抛出IllegalArgumentException
。此方法简单地委托给
model
。等同于:getModel().setValue(value)
- 参数:
-
value
- 微调器的新值 - 抛出:
-
IllegalArgumentException
- 如果value
不被允许 - 另请参见:
-
getNextValue
返回getValue()
返回的对象之后的序列中的对象。如果已到达序列的末尾,则返回null
。调用此方法不会影响value
。此方法简单地委托给
model
。等同于:getModel().getNextValue()
- 返回:
-
下一个合法值或
null
(如果不存在) - 另请参见:
-
addChangeListener
向列表中添加一个侦听器,每当模型发生更改时通知。传递给ChangeListeners
的ChangeEvents
的源将是此JSpinner
。还请注意,替换模型不会影响直接添加到JSpinner的侦听器。应用程序可以直接向模型添加侦听器。在这种情况下,事件的源将是SpinnerModel
。- 参数:
-
listener
- 要添加的ChangeListener
- 另请参见:
-
removeChangeListener
从此微调器中删除ChangeListener
。- 参数:
-
listener
- 要移除的ChangeListener
- 另请参见:
-
getChangeListeners
返回使用addChangeListener()
添加到此JSpinner的所有ChangeListener
的数组。- 返回:
-
所有已添加的
ChangeListener
数组,如果未添加任何侦听器,则返回空数组 - 自:
- 1.4
-
fireStateChanged
protected void fireStateChanged()向每个ChangeListener
发送一个ChangeEvent
,其源是此JSpinner
。当向微调器添加ChangeListener
时,每次从模型接收ChangeEvent
时都会调用此方法。- 另请参见:
-
getPreviousValue
返回getValue()
返回的对象之前的序列中的对象。如果已到达序列的末尾,则返回null
。调用此方法不会影响value
。此方法简单地委托给
model
。等同于:getModel().getPreviousValue()
- 返回:
-
前一个合法值或
null
(如果不存在) - 另请参见:
-
setEditor
@BeanProperty(visualUpdate=true, description="JComponent that displays the current value of the model") public void setEditor(JComponent editor) 更改显示SpinnerModel
当前值的JComponent
。此方法的责任是断开旧编辑器与模型的连接,并连接新编辑器。这可能意味着从模型或微调器本身中删除旧编辑器的ChangeListener
,并为新编辑器添加一个。- 参数:
-
editor
- 新编辑器 - 抛出:
-
IllegalArgumentException
- 如果编辑器为null
- 另请参见:
-
getEditor
返回显示并可能更改模型值的组件。- 返回:
- 显示并可能更改模型值的组件
- 另请参见:
-
commitEdit
将当前编辑的值提交给SpinnerModel
。如果编辑器是
DefaultEditor
的实例,则将调用编辑器,否则不执行任何操作。- 抛出:
-
ParseException
- 如果无法提交当前编辑的值。
-
getAccessibleContext
获取JSpinner
的AccessibleContext
- 指定者:
-
getAccessibleContext
在接口Accessible
中 - 覆盖:
-
getAccessibleContext
在类Component
中 - 返回:
-
JSpinner
的AccessibleContext
- 自:
- 1.5
-