Package ca.cgjennings.ui
Class JCycleButton<M>
- java.lang.Object
-
- java.awt.Component
-
- java.awt.Container
-
- javax.swing.JComponent
-
- javax.swing.AbstractButton
-
- javax.swing.JButton
-
- ca.cgjennings.ui.JCycleButton<M>
-
- All Implemented Interfaces:
SettingBackedControl,java.awt.image.ImageObserver,java.awt.ItemSelectable,java.awt.MenuContainer,java.io.Serializable,javax.accessibility.Accessible,javax.swing.SwingConstants
public class JCycleButton<M> extends javax.swing.JButton implements SettingBackedControl
A user interface control that cycles through a fixed set of options. This is similar to aJSpinner, but the selected value cannot be edited with the keyboard and the control has a button-like appearance rather than a field-like appearance.The cycle control is appropriate when the user must select amongst a fixed, small number of options. Two options is an ideal number, and three is acceptable. More than that and it becomes awkward for the user to discover the possible values.
The button uses a simple model consisting of an array of the possible choices. You can listen for changes in the selected item by adding an
ActionListeneras you would for other button types.- Since:
- 3.0
- Author:
- Chris Jennings
- See Also:
- Serialized Form
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class javax.swing.JButton
javax.swing.JButton.AccessibleJButton
-
Nested classes/interfaces inherited from class javax.swing.AbstractButton
javax.swing.AbstractButton.AccessibleAbstractButton, javax.swing.AbstractButton.ButtonChangeListener
-
Nested classes/interfaces inherited from class javax.swing.JComponent
javax.swing.JComponent.AccessibleJComponent
-
-
Field Summary
-
Fields inherited from class javax.swing.AbstractButton
actionListener, BORDER_PAINTED_CHANGED_PROPERTY, changeEvent, changeListener, CONTENT_AREA_FILLED_CHANGED_PROPERTY, DISABLED_ICON_CHANGED_PROPERTY, DISABLED_SELECTED_ICON_CHANGED_PROPERTY, FOCUS_PAINTED_CHANGED_PROPERTY, HORIZONTAL_ALIGNMENT_CHANGED_PROPERTY, HORIZONTAL_TEXT_POSITION_CHANGED_PROPERTY, ICON_CHANGED_PROPERTY, itemListener, MARGIN_CHANGED_PROPERTY, MNEMONIC_CHANGED_PROPERTY, model, MODEL_CHANGED_PROPERTY, PRESSED_ICON_CHANGED_PROPERTY, ROLLOVER_ENABLED_CHANGED_PROPERTY, ROLLOVER_ICON_CHANGED_PROPERTY, ROLLOVER_SELECTED_ICON_CHANGED_PROPERTY, SELECTED_ICON_CHANGED_PROPERTY, TEXT_CHANGED_PROPERTY, VERTICAL_ALIGNMENT_CHANGED_PROPERTY, VERTICAL_TEXT_POSITION_CHANGED_PROPERTY
-
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
-
-
Constructor Summary
Constructors Constructor Description JCycleButton()Creates a new cycle button with an empty model.JCycleButton(M[] model)Creates a new cycle button with the specified model.JCycleButton(M[] model, java.lang.String[] settingValues)Creates a new cycle button with the specified model and a matching array of string values that will be used as setting proxies.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected voidfireActionPerformed(java.awt.event.ActionEvent event)voidfromSetting(java.lang.String v)Selects the item that matches the specified setting value.java.lang.Object[]getCycleModel()Returns a copy of the current model.java.awt.DimensiongetMinimumSize()java.awt.DimensiongetPreferredSize()intgetSelectedIndex()Returns the index of the selected item in the model.MgetSelectedItem()Returns the currently selected item, as displayed on the face of the button.java.awt.DimensiongetSize()voidsetCycleModel(M... model)Sets the model that the button cycles through.voidsetFont(java.awt.Font font)voidsetIcon(javax.swing.Icon icon)voidsetSelectedIndex(int index)Sets the currently selected item.voidsetSelectedItem(M selection)Sets the currently selected item.java.lang.StringtoSetting()Returns a setting value to represent the selected item.-
Methods inherited from class javax.swing.JButton
getAccessibleContext, getUIClassID, isDefaultButton, isDefaultCapable, paramString, removeNotify, setDefaultCapable, updateUI
-
Methods inherited from class javax.swing.AbstractButton
actionPropertyChanged, addActionListener, addChangeListener, addImpl, addItemListener, checkHorizontalKey, checkVerticalKey, configurePropertiesFromAction, createActionListener, createActionPropertyChangeListener, createChangeListener, createItemListener, doClick, doClick, fireItemStateChanged, fireStateChanged, getAction, getActionCommand, getActionListeners, getChangeListeners, getDisabledIcon, getDisabledSelectedIcon, getDisplayedMnemonicIndex, getHideActionText, getHorizontalAlignment, getHorizontalTextPosition, getIcon, getIconTextGap, getItemListeners, getLabel, getMargin, getMnemonic, getModel, getMultiClickThreshhold, getPressedIcon, getRolloverIcon, getRolloverSelectedIcon, getSelectedIcon, getSelectedObjects, getText, getUI, getVerticalAlignment, getVerticalTextPosition, imageUpdate, init, isBorderPainted, isContentAreaFilled, isFocusPainted, isRolloverEnabled, isSelected, paintBorder, removeActionListener, removeChangeListener, removeItemListener, setAction, setActionCommand, setBorderPainted, setContentAreaFilled, setDisabledIcon, setDisabledSelectedIcon, setDisplayedMnemonicIndex, setEnabled, setFocusPainted, setHideActionText, setHorizontalAlignment, setHorizontalTextPosition, setIconTextGap, setLabel, setLayout, setMargin, setMnemonic, setMnemonic, setModel, setMultiClickThreshhold, setPressedIcon, setRolloverEnabled, setRolloverIcon, setRolloverSelectedIcon, setSelected, setSelectedIcon, setText, setUI, setVerticalAlignment, setVerticalTextPosition
-
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, getBaseline, getBaselineResizeBehavior, getBorder, getBounds, getClientProperty, getComponentGraphics, getComponentPopupMenu, getConditionForKeyStroke, getDebugGraphicsOptions, getDefaultLocale, getFontMetrics, getGraphics, getHeight, getInheritsPopupMenu, getInputMap, getInputMap, getInputVerifier, getInsets, getInsets, getListeners, getLocation, getMaximumSize, getNextFocusableComponent, getPopupLocation, 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, paintChildren, paintComponent, paintImmediately, paintImmediately, print, printAll, printBorder, printChildren, printComponent, processComponentKeyEvent, processKeyBinding, processKeyEvent, processMouseEvent, processMouseMotionEvent, putClientProperty, registerKeyboardAction, registerKeyboardAction, removeAncestorListener, removeVetoableChangeListener, repaint, repaint, requestDefaultFocus, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, resetKeyboardActions, reshape, revalidate, scrollRectToVisible, setActionMap, setAlignmentX, setAlignmentY, setAutoscrolls, setBackground, setBorder, setComponentPopupMenu, setDebugGraphicsOptions, setDefaultLocale, setDoubleBuffered, setFocusTraversalKeys, 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, 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, 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, getPropertyChangeListeners, getPropertyChangeListeners, getToolkit, getTreeLock, gotFocus, handleEvent, hasFocus, 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 Detail
-
JCycleButton
public JCycleButton()
Creates a new cycle button with an empty model.
-
JCycleButton
public JCycleButton(M[] model)
Creates a new cycle button with the specified model.- Parameters:
model- an array of the possible selections- See Also:
setCycleModel(M...)
-
JCycleButton
public JCycleButton(M[] model, java.lang.String[] settingValues)
Creates a new cycle button with the specified model and a matching array of string values that will be used as setting proxies. The proxy values are used when mapping the selected object to or from a setting value. For example, the model could be a string model with values "Female" and "Male", while the proxy setting values could be "F" and "M".Note: This constructor is only relevant if using the button as
SettingBackedControl.- Parameters:
model- an array of the possible selectionssettingValues- an array of matching setting proxies, ornull- See Also:
setCycleModel(M...),toSetting(),fromSetting(java.lang.String)
-
-
Method Detail
-
getSelectedIndex
public int getSelectedIndex()
Returns the index of the selected item in the model. Returns -1 if the model isnullor empty.- Returns:
- the index of the selected item
-
setSelectedIndex
public void setSelectedIndex(int index)
Sets the currently selected item. If the index is beyond the last element in the model, or if it is less than zero, the first element is selected (if any).- Parameters:
index- the index of the element in the model to select
-
setSelectedItem
public void setSelectedItem(M selection)
Sets the currently selected item. This has no effect if the supplied value is not in the model.- Parameters:
selection- the model member to select
-
getSelectedItem
public M getSelectedItem()
Returns the currently selected item, as displayed on the face of the button.- Returns:
- the selected item, or
nullif there is no model set
-
setFont
public void setFont(java.awt.Font font)
- Overrides:
setFontin classjavax.swing.JComponent
-
setIcon
public void setIcon(javax.swing.Icon icon)
- Overrides:
setIconin classjavax.swing.AbstractButton
-
setCycleModel
@SafeVarargs public final void setCycleModel(M... model)
Sets the model that the button cycles through. The button will make its own copy of the supplied model.- Parameters:
model- an array of the possible selections- Throws:
java.lang.IllegalArgumentException- if there are proxy setting values and the number of elements in the model does not match the number of proxy setting values
-
getCycleModel
public java.lang.Object[] getCycleModel()
Returns a copy of the current model.- Returns:
- an array of the values that the button will cycle through;
nullif no model has been set
-
fireActionPerformed
protected void fireActionPerformed(java.awt.event.ActionEvent event)
- Overrides:
fireActionPerformedin classjavax.swing.AbstractButton
-
getPreferredSize
public java.awt.Dimension getPreferredSize()
- Overrides:
getPreferredSizein classjavax.swing.JComponent
-
getMinimumSize
public java.awt.Dimension getMinimumSize()
- Overrides:
getMinimumSizein classjavax.swing.JComponent
-
getSize
public java.awt.Dimension getSize()
- Overrides:
getSizein classjava.awt.Component
-
fromSetting
public void fromSetting(java.lang.String v)
Selects the item that matches the specified setting value. If this button was created with setting proxies, the index of the proxy that equals the specified value will become the selected index. Otherwise, the element in the model whosetoStringvalue matches the specified value is selected.- Specified by:
fromSettingin interfaceSettingBackedControl- Parameters:
v- the setting value that represents the value to select
-
toSetting
public java.lang.String toSetting()
Returns a setting value to represent the selected item. If this button was created with setting proxies, the proxy for the selected item is returned. Otherwise, thetoString()value of the selected item is returned.- Specified by:
toSettingin interfaceSettingBackedControl- Returns:
- a setting value for the selected item
-
-