mars.venus
Class RepeatButton

java.lang.Object
  extended by java.awt.Component
      extended by java.awt.Container
          extended by javax.swing.JComponent
              extended by javax.swing.AbstractButton
                  extended by javax.swing.JButton
                      extended by mars.venus.RepeatButton
All Implemented Interfaces:
ActionListener, MouseListener, ImageObserver, ItemSelectable, MenuContainer, Serializable, EventListener, Accessible, SwingConstants

public class RepeatButton
extends JButton
implements ActionListener, MouseListener

RepeatButton is a JButton which contains a timer for firing events while the button is held down. There is a default initial delay of 300ms before the first event is fired and a 60ms delay between subsequent events. When the user holds the button down and moves the mouse out from over the button, the timer stops, but if the user moves the mouse back over the button without having released the mouse button, the timer starts up again at the same delay rate. If the enabled state is changed while the timer is active, it will be stopped. NOTE: The normal button behavior is that the action event is fired after the button is released. It may be important to konw then that this is still the case. So in effect, listeners will get 1 more event then what the internal timer fires. It's not a "bug", per se, just something to be aware of. There seems to be no way to suppress the final event from firing anyway, except to process all ActionListeners internally. But realistically, it probably doesn't matter.

See Also:
Serialized Form

Nested Class Summary
 
Nested classes/interfaces inherited from class javax.swing.JButton
JButton.AccessibleJButton
 
Nested classes/interfaces inherited from class javax.swing.AbstractButton
AbstractButton.AccessibleAbstractButton, AbstractButton.ButtonChangeListener
 
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.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
accessibleContext, 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
BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT
 
Fields inherited from interface javax.swing.SwingConstants
BOTTOM, CENTER, EAST, HORIZONTAL, LEADING, LEFT, NEXT, NORTH, NORTH_EAST, NORTH_WEST, PREVIOUS, RIGHT, SOUTH, SOUTH_EAST, SOUTH_WEST, TOP, TRAILING, VERTICAL, WEST
 
Fields inherited from interface java.awt.image.ImageObserver
ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH
 
Constructor Summary
RepeatButton()
          Creates a button with no set text or icon.
RepeatButton(Action a)
          Creates a button where properties are taken from the Action supplied.
RepeatButton(Icon icon)
          Creates a button with an icon.
RepeatButton(String text)
          Creates a button with text.
RepeatButton(String text, Icon icon)
          Creates a button with initial text and an icon.
 
Method Summary
 void actionPerformed(ActionEvent ae)
          Handle action events.
 int getDelay()
          Gets the delay for the timer of this button.
 int getInitialDelay()
          Gets the initial delay for the timer of this button.
 boolean isRepeatEnabled()
          Checks if the button should fire events when held.
static void main(String[] args)
          Main method, for testing.
 void mouseClicked(MouseEvent me)
          Handle mouse clicked events.
 void mouseEntered(MouseEvent me)
          Handle mouse entered events.
 void mouseExited(MouseEvent me)
          Handle mouse exited events.
 void mousePressed(MouseEvent me)
          Handle mouse pressed events.
 void mouseReleased(MouseEvent me)
          Handle mouse released events.
 void setDelay(int d)
          Set the delay for the timer of this button.
 void setEnabled(boolean en)
          Sets the enabled state of this button.
 void setInitialDelay(int d)
          Sets the initial delay for the timer of this button.
 void setRepeatEnabled(boolean en)
          Sets if the button should fire events when held.
 
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, fireActionPerformed, 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, setFocusPainted, setHideActionText, setHorizontalAlignment, setHorizontalTextPosition, setIcon, 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, getMinimumSize, getNextFocusableComponent, getPopupLocation, getPreferredSize, getRegisteredKeyStrokes, getRootPane, getSize, getToolTipLocation, getToolTipText, getToolTipText, getTopLevelAncestor, getTransferHandler, getVerifyInputWhenFocusTarget, getVetoableChangeListeners, getVisibleRect, getWidth, getX, getY, grabFocus, isDoubleBuffered, isLightweightComponent, isManagingFocus, isOpaque, isOptimizedDrawingEnabled, isPaintingForPrint, 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, 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, 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, transferFocusBackward, 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, hide, 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, transferFocusUpCycle
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

RepeatButton

public RepeatButton()
Creates a button with no set text or icon.


RepeatButton

public RepeatButton(Action a)
Creates a button where properties are taken from the Action supplied.

Parameters:
a - the button action

RepeatButton

public RepeatButton(Icon icon)
Creates a button with an icon.

Parameters:
icon - the button icon

RepeatButton

public RepeatButton(String text)
Creates a button with text.

Parameters:
text - the button text

RepeatButton

public RepeatButton(String text,
                    Icon icon)
Creates a button with initial text and an icon.

Parameters:
text - the button text
icon - the button icon
Method Detail

getDelay

public int getDelay()
Gets the delay for the timer of this button.

Returns:
the delay

setDelay

public void setDelay(int d)
Set the delay for the timer of this button.

Parameters:
d - the delay

getInitialDelay

public int getInitialDelay()
Gets the initial delay for the timer of this button.

Returns:
the initial delay

setInitialDelay

public void setInitialDelay(int d)
Sets the initial delay for the timer of this button.

Parameters:
d - the initial delay

isRepeatEnabled

public boolean isRepeatEnabled()
Checks if the button should fire events when held. If false, the button is effectively a plain old JButton, but there may be times when this feature might wish to be disabled.

Returns:
if true, the button should fire events when held

setRepeatEnabled

public void setRepeatEnabled(boolean en)
Sets if the button should fire events when held. If false, the button is effectively a plain old JButton, but there may be times when this feature might wish to be disabled. If false, it will also stop the timer if it's running.

Parameters:
en - if true, the button should fire events when held

setEnabled

public void setEnabled(boolean en)
Sets the enabled state of this button. Overridden to stop the timer if it's running.

Overrides:
setEnabled in class AbstractButton
Parameters:
en - if true, enables the button

actionPerformed

public void actionPerformed(ActionEvent ae)
Handle action events. OVERRIDE THIS IN SUBCLASS!

Specified by:
actionPerformed in interface ActionListener
Parameters:
ae - the action event

mouseClicked

public void mouseClicked(MouseEvent me)
Handle mouse clicked events.

Specified by:
mouseClicked in interface MouseListener
Parameters:
me - the mouse event

mousePressed

public void mousePressed(MouseEvent me)
Handle mouse pressed events.

Specified by:
mousePressed in interface MouseListener
Parameters:
me - the mouse event

mouseReleased

public void mouseReleased(MouseEvent me)
Handle mouse released events.

Specified by:
mouseReleased in interface MouseListener
Parameters:
me - the mouse event

mouseEntered

public void mouseEntered(MouseEvent me)
Handle mouse entered events.

Specified by:
mouseEntered in interface MouseListener
Parameters:
me - the mouse event

mouseExited

public void mouseExited(MouseEvent me)
Handle mouse exited events.

Specified by:
mouseExited in interface MouseListener
Parameters:
me - the mouse event

main

public static void main(String[] args)
Main method, for testing. Creates a frame with both styles of menu.

Parameters:
args - the command-line arguments