Class VariableInput

  • All Implemented Interfaces:
    InputObject, Tieable, Value, java.awt.image.ImageObserver, java.awt.MenuContainer, java.io.Serializable, javax.accessibility.Accessible

    public class VariableInput
    extends java.awt.TextField
    implements InputObject, Tieable, Value
    A VariableInput is an input box into which the user can type a real number value, which becomes the value of an associated Variable. The value of the Variable can change only when the VariableInput's checkInput() method is called (usually by a Controller). See the Controller class for more information.

    Whenever checkInput is called, an error of type JCMError might be generated. If throwErrors is true, this error is thrown; if it is false, the error is caught, the value of the variable is set to Double.NaN, and no error is thrown. The error message associated with the error can be retrieved by calling getErrorMessage(), if desired. (This value is null if no error occurred the last time checkInput was called.)

    A VariableInput is a Value, so it can be used directly where a Value object is needed.

    An VariableInput will ordinarily be registered with a Controller in TWO ways: It's added to a Controller with the Controller's add() method. This makes the Controller call the VariableInput's checkInput() method during the Controller's compute() method. Secondly, a Controller is set as the "onUserAction" property. This causes the Controller's compute() method to be called when the user presses return in the VariableInput box. This is optional-- you might, for example, only want the Controller to compute() when a Compute button is pressed. You can also set the VariableInput's onTextChange property to a Controller that you want to compute every time the text in the box changes.

    After the VariableInput is created, it is possible to specify the largest and smallest allowed values for the variable. It is also possible to specify what sytle of input is allowed. The style can be to allow any constant expression, constant real numbers only, or integers only. Set these parameters with setMin(), setMax(), and setInputStyle(). For setInputStyle(), the legal parameter values are VariableInput.EXPRESSION, VariableInput.REAL, and VariableInput.INTEGER. The default input style is EXPRESSION.

    See Also:
    Serialized Form
    • Nested Class Summary

      • Nested classes/interfaces inherited from class java.awt.TextField

        java.awt.TextField.AccessibleAWTTextField
      • Nested classes/interfaces inherited from class java.awt.TextComponent

        java.awt.TextComponent.AccessibleAWTTextComponent
      • Nested classes/interfaces inherited from class java.awt.Component

        java.awt.Component.AccessibleAWTComponent, java.awt.Component.BaselineResizeBehavior, java.awt.Component.BltBufferStrategy, java.awt.Component.FlipBufferStrategy
    • Field Summary

      Fields 
      Modifier and Type Field Description
      protected java.lang.String errorMessage
      Error message from the most recent time checkInput() as called.
      static int EXPRESSION
      A constant for use in the setInputStyle() method.
      protected int inputStyle
      One of the constant values EXPRESSION, REAL, or INTEGER, specifying the style of input.
      static int INTEGER
      A constant for use in the setInputStyle() method.
      protected double maxValue
      Largest allowable value.
      protected double minValue
      Smallest allowable value.
      protected java.lang.String previousContents
      This is set to true if the text in the box has been changed since the last time the value of the variable was checked by checkInput().
      static int REAL
      A constant for use in the setInputStyle() method.
      protected long serialNumber
      This serial number is increased each time the value of the variable changes.
      protected boolean throwErrors
      True if an error should be thrown when checkInput() is calles and the contents do not define a legal number.
      protected edu.hws.jcm.awt.VariableInput.VI variable
      The Variable that represents the value of this input box.
      • Fields inherited from class java.awt.TextComponent

        textListener
      • Fields inherited from class java.awt.Component

        accessibleContext, 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

      Constructors 
      Constructor Description
      VariableInput()
      Create an unnamed VariableInput with initial contents "0".
      VariableInput​(java.lang.String name, java.lang.String initialString)
      Construct a VariableInput with the given name and initial String (which can both be null).
      VariableInput​(java.lang.String name, java.lang.String initialString, Parser parser)
      Create a VariableInput just as in the constructor VariableInput(String,String).
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void addTo​(Parser p)
      A convenience method that registers this VariableInput's variable with Parser p (but only if both p and the name of the variable are non-null).
      void checkInput()
      Check whether the contents are valid, and change the value of the associated variable if the new contents do not match the current value.
      protected double convertInput​(java.lang.String num)
      Convert a string into a real value.
      java.lang.String getErrorMessage()
      Get error message from previous call to checkInput().
      int getInputStyle()
      Return the input style, which determines what types of things are allowed in the input box.
      double getMax()
      Return the maximum value that will be accepted in this VariableInput box.
      double getMin()
      Return the minimum value that will be accepted in this VariableInput box.
      Controller getOnTextChange()
      Return the Controller, if any, that is notified when the text in this input box changes
      Controller getOnUserAction()
      Return the Controller, if any, that is notified when the user presses return in this text-input box.
      long getSerialNumber()
      Return this object's serial number, which increases whenever the value of the associated variable changes.
      boolean getThrowErrors()
      Return the value of the throwErrors property.
      double getVal()
      Return the value of the associated variable, which might not reflect the value of the contents of the input box.
      Variable getVariable()
      Get the associated variable for the VariableInput box.
      void notifyControllerOnChange​(Controller c)
      Method required by InputObject interface; in this class, it simply calls setOnUserAction(c).
      void processActionEvent​(java.awt.event.ActionEvent evt)
      Overridden to call onUserAction.compute() if onUserAction is non-null.
      void processTextEvent​(java.awt.event.TextEvent evt)
      Overridden to call onUserAction.compute() if onUserAction is non-null.
      void setInputStyle​(int style)
      Specify what types of things are allowed in the input box.
      void setMax​(double max)
      Specify the largest allowed value for the content of this VariableInput box.
      void setMin​(double min)
      Specify the smallest allowed value for the content of this VariableInput box.
      void setName​(java.lang.String name)
      Set the name of the variable.
      void setOnTextChange​(Controller c)
      If the Controller, cm is non-null, then its compute() method will be called whenever the text in this input box changes.
      void setOnUserAction​(Controller c)
      If the Controller, c, is non-null, then its compute() method will be called whenever the user presses the return key while typing in this text-input box.
      void setText​(java.lang.String text)
      This overrides the setText() method from the TextField class so that it will also force the contents to be checked the next time the checkInput() method is called.
      void setThrowErrors​(boolean throwErrors)
      Set the throwErrors property.
      void setVal​(double d)
      Set the value of the associated variable.
      void sync​(Tie tie, Tieable newest)
      Synchronize serial number and value with newest, unless this VariableInput is itself newest.
      JCMPanel withLabel()
      Convenience method for creating a component containing this VariableInput together with a label of the form " = ".
      JCMPanel withLabel​(java.awt.Color back, java.awt.Color fore)
      Convenience method for creating a component containing this VariableInput together with a label of the form "name = ".
      • Methods inherited from class java.awt.TextField

        addActionListener, addNotify, echoCharIsSet, getAccessibleContext, getActionListeners, getColumns, getEchoChar, getListeners, getMinimumSize, getMinimumSize, getPreferredSize, getPreferredSize, minimumSize, minimumSize, paramString, preferredSize, preferredSize, processEvent, removeActionListener, setColumns, setEchoChar, setEchoCharacter
      • Methods inherited from class java.awt.TextComponent

        addTextListener, enableInputMethods, getBackground, getCaretPosition, getInputMethodRequests, getSelectedText, getSelectionEnd, getSelectionStart, getText, getTextListeners, isEditable, removeNotify, removeTextListener, select, selectAll, setBackground, setCaretPosition, setEditable, setSelectionEnd, setSelectionStart
      • Methods inherited from class java.awt.Component

        action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, addPropertyChangeListener, addPropertyChangeListener, applyComponentOrientation, areFocusTraversalKeysSet, bounds, checkImage, checkImage, coalesceEvents, contains, contains, createImage, createImage, createVolatileImage, createVolatileImage, deliverEvent, disable, disableEvents, dispatchEvent, doLayout, enable, enable, enableEvents, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getAlignmentX, getAlignmentY, getBaseline, getBaselineResizeBehavior, getBounds, getBounds, getColorModel, getComponentAt, getComponentAt, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusCycleRootAncestor, getFocusListeners, getFocusTraversalKeys, getFocusTraversalKeysEnabled, getFont, getFontMetrics, getForeground, getGraphics, getGraphicsConfiguration, getHeight, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputContext, getInputMethodListeners, getKeyListeners, getLocale, getLocation, getLocation, getLocationOnScreen, getMaximumSize, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getName, getParent, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getSize, getToolkit, getTreeLock, getWidth, getX, getY, gotFocus, handleEvent, hasFocus, hide, imageUpdate, inside, invalidate, isBackgroundSet, isCursorSet, isDisplayable, isDoubleBuffered, isEnabled, isFocusable, isFocusCycleRoot, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isOpaque, isPreferredSizeSet, isShowing, isValid, isVisible, keyDown, keyUp, layout, list, list, list, list, list, locate, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paint, paintAll, postEvent, prepareImage, prepareImage, print, printAll, processComponentEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processKeyEvent, processMouseEvent, processMouseMotionEvent, processMouseWheelEvent, remove, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, repaint, requestFocus, requestFocus, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, requestFocusInWindow, reshape, resize, resize, revalidate, setBounds, setBounds, setComponentOrientation, setCursor, setDropTarget, setEnabled, setFocusable, setFocusTraversalKeys, setFocusTraversalKeysEnabled, setFont, setForeground, setIgnoreRepaint, setLocale, setLocation, setLocation, setMaximumSize, setMinimumSize, setMixingCutoutShape, setPreferredSize, setSize, setSize, setVisible, show, show, size, toString, transferFocus, transferFocusBackward, transferFocusUpCycle, update, validate
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
    • Field Detail

      • variable

        protected edu.hws.jcm.awt.VariableInput.VI variable
        The Variable that represents the value of this input box. (VI is a private nested class inside VariableInput.)
      • throwErrors

        protected boolean throwErrors
        True if an error should be thrown when checkInput() is calles and the contents do not define a legal number. True by default.
      • errorMessage

        protected java.lang.String errorMessage
        Error message from the most recent time checkInput() as called. Null if there was no error.
      • serialNumber

        protected long serialNumber
        This serial number is increased each time the value of the variable changes.
      • previousContents

        protected java.lang.String previousContents
        This is set to true if the text in the box has been changed since the last time the value of the variable was checked by checkInput().
      • minValue

        protected double minValue
        Smallest allowable value.
      • maxValue

        protected double maxValue
        Largest allowable value.
      • inputStyle

        protected int inputStyle
        One of the constant values EXPRESSION, REAL, or INTEGER, specifying the style of input.
      • EXPRESSION

        public static final int EXPRESSION
        A constant for use in the setInputStyle() method. Any constant expression is allowed.
        See Also:
        Constant Field Values
      • REAL

        public static final int REAL
        A constant for use in the setInputStyle() method. Only real numbers are allowed.
        See Also:
        Constant Field Values
      • INTEGER

        public static final int INTEGER
        A constant for use in the setInputStyle() method. Only integers are allowed.
        See Also:
        Constant Field Values
    • Constructor Detail

      • VariableInput

        public VariableInput()
        Create an unnamed VariableInput with initial contents "0".
      • VariableInput

        public VariableInput​(java.lang.String name,
                             java.lang.String initialString)
        Construct a VariableInput with the given name and initial String (which can both be null). If initialString is null, the string "0" is used. No error occurs in the constructor if the initialString does not represent a legal value (A string rather than a double is used for initialization since the initial content can be an expression such as "pi/2".) If name is not null, it is used as the name of the VariableInput component as well as the name of the associated variable.
      • VariableInput

        public VariableInput​(java.lang.String name,
                             java.lang.String initialString,
                             Parser parser)
        Create a VariableInput just as in the constructor VariableInput(String,String). Then, if both parser and name are non-null, register the associated variable with the parser.
    • Method Detail

      • getVariable

        public Variable getVariable()
        Get the associated variable for the VariableInput box. You will need this, for example, if you want to register the variable with a Parser.
      • withLabel

        public JCMPanel withLabel()
        Convenience method for creating a component containing this VariableInput together with a label of the form " = ". This version uses default colors for the label, which are inherited from the containing component.
      • withLabel

        public JCMPanel withLabel​(java.awt.Color back,
                                  java.awt.Color fore)
        Convenience method for creating a component containing this VariableInput together with a label of the form "name = ". Uses the given background and foreground colors for the label and the panel. The colors can be null to use the defaults, which will be inherited from the containing Component.
      • setName

        public void setName​(java.lang.String name)
        Set the name of the variable. This should not be called while the variable is registered with a Parser. The name of the VariableInput Component is also set to name, if the name is non=null.
        Overrides:
        setName in class java.awt.Component
      • addTo

        public void addTo​(Parser p)
        A convenience method that registers this VariableInput's variable with Parser p (but only if both p and the name of the variable are non-null).
      • setOnUserAction

        public void setOnUserAction​(Controller c)
        If the Controller, c, is non-null, then its compute() method will be called whenever the user presses the return key while typing in this text-input box.
      • getOnUserAction

        public Controller getOnUserAction()
        Return the Controller, if any, that is notified when the user presses return in this text-input box.
      • notifyControllerOnChange

        public void notifyControllerOnChange​(Controller c)
        Method required by InputObject interface; in this class, it simply calls setOnUserAction(c). This is meant to be called by JCMPanel.gatherInputs().
        Specified by:
        notifyControllerOnChange in interface InputObject
      • setOnTextChange

        public void setOnTextChange​(Controller c)
        If the Controller, cm is non-null, then its compute() method will be called whenever the text in this input box changes. Furthermore, the throwErrors property will be set to false, to avoid throwing multiple errors while the user is typing. (You can change it back to true if you want by calling setThrowErrors(true).)
      • getOnTextChange

        public Controller getOnTextChange()
        Return the Controller, if any, that is notified when the text in this input box changes
      • getVal

        public double getVal()
        Return the value of the associated variable, which might not reflect the value of the contents of the input box. The value of the variable changes only when the checkInput() method is called, or when the setVal() method is called. Call checkInput() first, if you want to be sure of getting the same value that is currently shown in the box.
        Specified by:
        getVal in interface Value
      • setVal

        public void setVal​(double d)
        Set the value of the associated variable. Also sets the content of the input box.
      • setThrowErrors

        public void setThrowErrors​(boolean throwErrors)
        Set the throwErrors property. If the value is true, then an error will be thrown by the checkInput() method when the contents of the VariableInput box are not legal. Otherwise, no error is thrown; the value of the variable is just set to Double.NaN.
      • getThrowErrors

        public boolean getThrowErrors()
        Return the value of the throwErrors property.
      • setMin

        public void setMin​(double min)
        Specify the smallest allowed value for the content of this VariableInput box.
      • getMin

        public double getMin()
        Return the minimum value that will be accepted in this VariableInput box.
      • setMax

        public void setMax​(double max)
        Specify the largest allowed value for the content of this VariableInput box.
      • getMax

        public double getMax()
        Return the maximum value that will be accepted in this VariableInput box.
      • setInputStyle

        public void setInputStyle​(int style)
        Specify what types of things are allowed in the input box. The value of the parameter, style, must be one of the constants VariableInput.EXPRESSION, VariableInput.REAL, or VariableInput.INTEGER. If not, the call to setInputStyle is ignored.
      • getInputStyle

        public int getInputStyle()
        Return the input style, which determines what types of things are allowed in the input box. The returned value is one of the contstants EXPRESSION, REAL, or INTEGER
      • getErrorMessage

        public java.lang.String getErrorMessage()
        Get error message from previous call to checkInput(). Returns null if there was no error.
      • checkInput

        public void checkInput()
        Check whether the contents are valid, and change the value of the associated variable if the new contents do not match the current value. This might throw an error of type JCMError, if throwErrors is true. This is usually called by a Controller.
        Specified by:
        checkInput in interface InputObject
      • getSerialNumber

        public long getSerialNumber()
        Return this object's serial number, which increases whenever the value of the associated variable changes.
        Specified by:
        getSerialNumber in interface Tieable
      • sync

        public void sync​(Tie tie,
                         Tieable newest)
        Synchronize serial number and value with newest, unless this VariableInput is itself newest. This is required by the Tieable interface, and is usually called by an object of type Tie.
        Specified by:
        sync in interface Tieable
      • convertInput

        protected double convertInput​(java.lang.String num)
        Convert a string into a real value. The parameter is taken from the input box when this method is called by VI.checkInput() Throw a JCMError if any error is found in the input.
        Parameters:
        num - String to be converted
        Returns:
        the real value.
      • setText

        public void setText​(java.lang.String text)
        This overrides the setText() method from the TextField class so that it will also force the contents to be checked the next time the checkInput() method is called.
        Overrides:
        setText in class java.awt.TextField
        Parameters:
        text - change text to this.
      • processActionEvent

        public void processActionEvent​(java.awt.event.ActionEvent evt)
        Overridden to call onUserAction.compute() if onUserAction is non-null. This is not meant to be called directly.
        Overrides:
        processActionEvent in class java.awt.TextField
      • processTextEvent

        public void processTextEvent​(java.awt.event.TextEvent evt)
        Overridden to call onUserAction.compute() if onUserAction is non-null. This is not meant to be called directly.
        Overrides:
        processTextEvent in class java.awt.TextComponent