sim.util.gui
Class NumberTextField

java.lang.Object
  extended byjava.awt.Component
      extended byjava.awt.Container
          extended byjavax.swing.JComponent
              extended bysim.util.gui.NumberTextField
All Implemented Interfaces:
java.awt.image.ImageObserver, java.awt.MenuContainer, java.io.Serializable

public class NumberTextField
extends javax.swing.JComponent

A simple class that lets you specify a label and validate a numerical value. NumberTextField assumes access to several image files for the widgets to the right of the text field: a left-arrow button, a right-arrow button, and a "belly button". The left-arrow button decreases the numerical value, the right-arrow button increases it, and the belly button resets it to its initial default value. You can also change the value in the text field proper. Why use this class instead of a slider? Because it is not ranged: the numbers can be any value.

NumberTextField lets users increase values according to a provided formula of the form value = value * M + A, and similarly decrease values as value = (value - A) / M. You specify the values of M and A and the initial default value. This gives you some control on how values should change: linearly or geometrically.

You can exercise further control by subclassing the class and overriding the newValue(val) method, which filters all newly user-set values and "corrects" them. Programmatically set values (by calling setValue(...)) are not filtered through newValue by default. If you need to filter, you should do setValue(newValue(val));

NumberTextFields can also be provided with an optional label.

See Also:
Serialized Form

Nested Class Summary
 
Nested classes inherited from class javax.swing.JComponent
javax.swing.JComponent.AccessibleJComponent
 
Nested classes inherited from class java.awt.Container
java.awt.Container.AccessibleAWTContainer
 
Nested classes inherited from class java.awt.Component
java.awt.Component.AccessibleAWTComponent, java.awt.Component.BltBufferStrategy, java.awt.Component.FlipBufferStrategy
 
Field Summary
 double add
           
 javax.swing.JButton bellyButton
           
 double currentValue
           
 java.awt.Color defaultColor
           
 javax.swing.JButton downButton
           
 java.awt.Color editedColor
           
 javax.swing.JLabel fieldLabel
           
 java.awt.event.FocusAdapter focusAdapter
           
static javax.swing.ImageIcon I_BELLY
           
static javax.swing.ImageIcon I_BELLY_PRESSED
           
static javax.swing.ImageIcon I_DOWN
           
static javax.swing.ImageIcon I_DOWN_PRESSED
           
static javax.swing.ImageIcon I_UP
           
static javax.swing.ImageIcon I_UP_PRESSED
           
 double initialValue
           
 java.awt.event.KeyListener listener
           
 double multiply
           
 javax.swing.JButton upButton
           
 javax.swing.JTextField valField
           
 
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 java.awt.image.ImageObserver
ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH
 
Constructor Summary
NumberTextField(double initialValue)
          Creates a NumberTextField which does not display the belly button or arrows.
NumberTextField(double initialValue, boolean doubleEachTime)
          Creates a NumberTextField which (if doubleEachTime) doubles or halves the current value, or (if not doubleEachTime) increases or decreases by 1 each time.
NumberTextField(double initialValue, double multiply, double add)
          Creates a NumberTextField according to the provided parameters.
NumberTextField(java.lang.String label, double initialValue, boolean doubleEachTime)
          Creates a NumberTextField with a provided label.
NumberTextField(java.lang.String label, double initialValue, double multiply, double add)
          Creates a NumberTextField with a provided label.
 
Method Summary
 java.awt.Color getEditedColor()
           
 double getValue()
          Returns the most recently set value.
static javax.swing.ImageIcon iconFor(java.lang.String name)
           
 double newValue(double newValue)
          Override this to be informed when a new value has been set.
 void setEditedColor(java.awt.Color c)
           
 void setEnabled(boolean b)
           
 void setToolTipText(java.lang.String text)
           
 void setValue(double val)
          Sets the value without filtering first.
protected  void setValues(java.lang.String label, double initialValue, double multiply, double add)
           
 void submit()
           
 void update()
           
 
Methods inherited from class javax.swing.JComponent
addAncestorListener, addNotify, addPropertyChangeListener, addPropertyChangeListener, addVetoableChangeListener, computeVisibleRect, contains, createToolTip, disable, enable, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, fireVetoableChange, getAccessibleContext, getActionForKeyStroke, getActionMap, getAlignmentX, getAlignmentY, getAncestorListeners, getAutoscrolls, getBorder, getBounds, getClientProperty, getComponentGraphics, getConditionForKeyStroke, getDebugGraphicsOptions, getDefaultLocale, getGraphics, getHeight, getInputMap, getInputMap, getInputVerifier, getInsets, getInsets, getListeners, getLocation, getMaximumSize, getMinimumSize, getNextFocusableComponent, getPreferredSize, getPropertyChangeListeners, getPropertyChangeListeners, getRegisteredKeyStrokes, getRootPane, getSize, getToolTipLocation, getToolTipText, getToolTipText, getTopLevelAncestor, getTransferHandler, getUIClassID, getVerifyInputWhenFocusTarget, getVetoableChangeListeners, getVisibleRect, getWidth, getX, getY, grabFocus, isDoubleBuffered, isLightweightComponent, isManagingFocus, isMaximumSizeSet, isMinimumSizeSet, isOpaque, isOptimizedDrawingEnabled, isPaintingTile, isPreferredSizeSet, isRequestFocusEnabled, isValidateRoot, paint, paintBorder, paintChildren, paintComponent, paintImmediately, paintImmediately, paramString, print, printAll, printBorder, printChildren, printComponent, processComponentKeyEvent, processKeyBinding, processKeyEvent, processMouseMotionEvent, putClientProperty, registerKeyboardAction, registerKeyboardAction, removeAncestorListener, removeNotify, removePropertyChangeListener, removePropertyChangeListener, removeVetoableChangeListener, repaint, repaint, requestDefaultFocus, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, resetKeyboardActions, reshape, revalidate, scrollRectToVisible, setActionMap, setAlignmentX, setAlignmentY, setAutoscrolls, setBackground, setBorder, setDebugGraphicsOptions, setDefaultLocale, setDoubleBuffered, setFont, setForeground, setInputMap, setInputVerifier, setMaximumSize, setMinimumSize, setNextFocusableComponent, setOpaque, setPreferredSize, setRequestFocusEnabled, setTransferHandler, setUI, setVerifyInputWhenFocusTarget, setVisible, unregisterKeyboardAction, update, updateUI
 
Methods inherited from class java.awt.Container
add, add, add, add, add, addContainerListener, addImpl, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getContainerListeners, getFocusTraversalKeys, getFocusTraversalPolicy, getLayout, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusCycleRoot, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paintComponents, preferredSize, printComponents, processContainerEvent, processEvent, remove, remove, removeAll, removeContainerListener, setFocusCycleRoot, setFocusTraversalKeys, setFocusTraversalPolicy, setLayout, 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, getBackground, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusCycleRootAncestor, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getFontMetrics, getForeground, getGraphicsConfiguration, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputContext, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocale, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMouseWheelListeners, getName, getParent, getPeer, getSize, getToolkit, getTreeLock, gotFocus, handleEvent, hasFocus, hide, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, 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, processMouseEvent, processMouseWheelEvent, remove, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, 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
 

Field Detail

valField

public javax.swing.JTextField valField

downButton

public javax.swing.JButton downButton

upButton

public javax.swing.JButton upButton

bellyButton

public javax.swing.JButton bellyButton

fieldLabel

public javax.swing.JLabel fieldLabel

initialValue

public double initialValue

multiply

public double multiply

add

public double add

currentValue

public double currentValue

defaultColor

public java.awt.Color defaultColor

editedColor

public java.awt.Color editedColor

I_DOWN

public static final javax.swing.ImageIcon I_DOWN

I_DOWN_PRESSED

public static final javax.swing.ImageIcon I_DOWN_PRESSED

I_BELLY

public static final javax.swing.ImageIcon I_BELLY

I_BELLY_PRESSED

public static final javax.swing.ImageIcon I_BELLY_PRESSED

I_UP

public static final javax.swing.ImageIcon I_UP

I_UP_PRESSED

public static final javax.swing.ImageIcon I_UP_PRESSED

listener

public java.awt.event.KeyListener listener

focusAdapter

public java.awt.event.FocusAdapter focusAdapter
Constructor Detail

NumberTextField

public NumberTextField(double initialValue)
Creates a NumberTextField which does not display the belly button or arrows.


NumberTextField

public NumberTextField(double initialValue,
                       boolean doubleEachTime)
Creates a NumberTextField which (if doubleEachTime) doubles or halves the current value, or (if not doubleEachTime) increases or decreases by 1 each time.


NumberTextField

public NumberTextField(double initialValue,
                       double multiply,
                       double add)
Creates a NumberTextField according to the provided parameters. initialValue specifies the initial number value. multiply and add work as follows: If the right arrow is pressed, then the current value is changed to newValue(value * multiply + add); similarly, if the left arrow is pressed, then the current value is changed to newValue((value - add) / multiply); if the belly button is pressed, then the current value is changed to newValue(initialValue); Common settings include:

initialValue = 1, multiply = 2, add = 0 (start at 1, double each time)
initialValue = 0, multiply = 1, add = 1 (start at 0, add 1 each time)

If multiply is 0, then no arrows are shown at all.


NumberTextField

public NumberTextField(java.lang.String label,
                       double initialValue,
                       boolean doubleEachTime)
Creates a NumberTextField with a provided label. If the label is null or empty, no label is created. Creates a NumberTextField which (if doubleEachTime) doubles or halves the current value, or (if not doubleEachTime) increases or decreases by 1 each time.


NumberTextField

public NumberTextField(java.lang.String label,
                       double initialValue,
                       double multiply,
                       double add)
Creates a NumberTextField with a provided label. If the label is null or empty, no label is created. initialValue specifies the initial number value. multiply and add work as follows: If the right arrow is pressed, then the current value is changed to newValue(value * multiply + add); similarly, if the left arrow is pressed, then the current value is changed to newValue((value - add) / multiply); if the belly button is pressed, then the current value is changed to newValue(initialValue); Common settings include:

initialValue = 1, multiply = 2, add = 0 (start at 1, double each time)
initialValue = 0, multiply = 1, add = 1 (start at 0, add 1 each time)

If multiply is 0, then no arrows are shown at all.

Method Detail

setEditedColor

public void setEditedColor(java.awt.Color c)

getEditedColor

public java.awt.Color getEditedColor()

iconFor

public static javax.swing.ImageIcon iconFor(java.lang.String name)

submit

public void submit()

update

public void update()

setValue

public void setValue(double val)
Sets the value without filtering first.


getValue

public double getValue()
Returns the most recently set value.


setValues

protected void setValues(java.lang.String label,
                         double initialValue,
                         double multiply,
                         double add)

newValue

public double newValue(double newValue)
Override this to be informed when a new value has been set. The return value should be the value you want the display to show instead.


setToolTipText

public void setToolTipText(java.lang.String text)

setEnabled

public void setEnabled(boolean b)