Class ExpressionInput
- java.lang.Object
-
- java.awt.Component
-
- java.awt.TextComponent
-
- java.awt.TextField
-
- edu.hws.jcm.awt.ExpressionInput
-
- All Implemented Interfaces:
InputObject
,Value
,java.awt.image.ImageObserver
,java.awt.MenuContainer
,java.io.Serializable
,javax.accessibility.Accessible
public class ExpressionInput extends java.awt.TextField implements InputObject, Value
An ExpressionInput is an input box that allows the user input a mathematical expression. There is an associated object that belongs to the class Expression. The value of this object can change only when checkInput() is called. The checkInput() method is usually called by a Controller.An ExpressionInput 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 Contrller call the ExpressionInput's checkInput() method during the Controller's compute() method. Secondly, the Controller is set as the "onUserAction" property. This causes the Controller's compute() method to be called when the user presses return in the ExpressionInput 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 ExpressionInput's onTextChange property to a Controller if you want it to compute every time the text in the box changes.
Use the function getFunction() if you want to use an ExpressionInput as a way of inputting a function.
- See Also:
- Serialized Form
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description protected class
ExpressionInput.EI
The expression associated with an ExpressionInput belongs to this class.-
Nested classes/interfaces inherited from class java.awt.TextField
java.awt.TextField.AccessibleAWTTextField
-
-
Field Summary
Fields Modifier and Type Field Description protected java.lang.String
errorMessage
Error message from the most recent time the input was checked by a call to checkInput().protected ExpressionInput.EI
expr
The Expression associate with this input box.protected Parser
parser
A parser for parsing the user's input expression.protected java.lang.String
previousContents
protected boolean
throwErrors
True if an error should be thrown when checkInput() is called, but the content of the box is not a legal expression.
-
Constructor Summary
Constructors Constructor Description ExpressionInput()
Create a new ExpressionFunction with no associated parser.ExpressionInput(java.lang.String initialValue, Parser p)
Create an ExpressionInputBox with initial contents given by initialValue.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
checkInput()
Get the expression from the box, maybe throw a JBCError if a ParseError occurs.java.lang.String
getErrorMessage()
Get error message from previous call to checkInput().Expression
getExpression()
Get the Expression associated with this ExpressionInput.Function
getFunction(Variable v)
Get a function of one variable whose value at a real number x is computed by assigning x to the variable v and then returning the value of the expression associated with this ExpressionInput.Function
getFunction(Variable[] v)
Get a function of one or more variables whose value at arguments x1, x2, ...Controller
getOnTextChange()
Return the Controller, if any, that is notified whenever the text in this input box changesController
getOnUserAction()
Return the Controller, if any, that is notified when the user presses return in this text-input box.boolean
getThrowErrors()
Return the value of the throwErrors property, which determines whether errors can be thrown when checkInput() is called.double
getVal()
Return the current value of the expression associated with this ExpressionInput.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
setOnTextChange(Controller c)
If the parameter, c, is non-null, then its compute method will be called whenever the text in this input box changes.void
setOnUserAction(Controller c)
If the parameter 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
setParser(Parser p)
Set the parser that is used to parse the user's input strings.void
setText(java.lang.String str)
Set the text displayed in this input box.void
setThrowErrors(boolean throwErrors)
Set the throwErrors property.-
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, setName, setPreferredSize, setSize, setSize, setVisible, show, show, size, toString, transferFocus, transferFocusBackward, transferFocusUpCycle, update, validate
-
-
-
-
Field Detail
-
expr
protected ExpressionInput.EI expr
The Expression associate with this input box. Class EI is a private nested class.
-
parser
protected Parser parser
A parser for parsing the user's input expression. If this is null, a default parser will be used and only constant expressions will be allowed.
-
previousContents
protected java.lang.String previousContents
-
throwErrors
protected boolean throwErrors
True if an error should be thrown when checkInput() is called, but the content of the box is not a legal expression. Otherwise, the expression will become a constant expression with value Double.NaN.
-
errorMessage
protected java.lang.String errorMessage
Error message from the most recent time the input was checked by a call to checkInput(). If this is null, then no error occurred.
-
-
Constructor Detail
-
ExpressionInput
public ExpressionInput()
Create a new ExpressionFunction with no associated parser. This can only be used to input constant expressions, unless you set a parser later with setParser().
-
ExpressionInput
public ExpressionInput(java.lang.String initialValue, Parser p)
Create an ExpressionInputBox with initial contents given by initialValue. (If initialValue is null, the empty string is used.) If p is not null, then p will be used to parse the contents of the box.- Parameters:
initialValue
- initial contents of ExpressionInputBox.p
- if non-null, this parser will be used to parse contents of the ExpressionInputBox.
-
-
Method Detail
-
setParser
public void setParser(Parser p)
Set the parser that is used to parse the user's input strings. If this is null, then a default parser is used that will only allow constant expressions.- Parameters:
p
- parser to register with user's input strings.
-
getExpression
public Expression getExpression()
Get the Expression associated with this ExpressionInput.
-
getFunction
public Function getFunction(Variable v)
Get a function of one variable whose value at a real number x is computed by assigning x to the variable v and then returning the value of the expression associated with this ExpressionInput. Of couse, v should be one of the variables registered with the Parser for this ExpressionInput, or else in can never occur in the expression. Note that the value of the variable v changes TEMPORARILY when the function is evaluated. (So you should not use a variable where setting the value has a side effect, such as the variable associated with a SliderVariable.)- Parameters:
v
- The function that is returned in a function of this variable.
-
getFunction
public Function getFunction(Variable[] v)
Get a function of one or more variables whose value at arguments x1, x2, ... is computed by assigning the x's to the variables and then returning the value of the expression associated with this ExpressionInput. Of couse, each v[i] should be one of the variables registered with the Parser for this ExpressionInput. Note that the value of the variables change TEMPORARILY when the function is evaluated.- Parameters:
v
- The function that is returned is a function of the variables in this array.
-
getVal
public double getVal()
Return the current value of the expression associated with this ExpressionInput.
-
setOnUserAction
public void setOnUserAction(Controller c)
If the parameter 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 interfaceInputObject
-
setOnTextChange
public void setOnTextChange(Controller c)
If the parameter, c, 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).) It would only rarely make sense to use this feature.
-
getOnTextChange
public Controller getOnTextChange()
Return the Controller, if any, that is notified whenever the text in this input box changes
-
setThrowErrors
public void setThrowErrors(boolean throwErrors)
Set the throwErrors property. When this is true, a JCMError can be thrown when checkInput() is called an a parse error is found in the contents of the input box. If throwErrors is false, no error is thrown. Instead, the expression is set to a constant expression with value Double.NaN.
-
getThrowErrors
public boolean getThrowErrors()
Return the value of the throwErrors property, which determines whether errors can be thrown when checkInput() is called.
-
getErrorMessage
public java.lang.String getErrorMessage()
Get error message from previous call to checkInput(). Returns null if and only if there was no error.
-
checkInput
public void checkInput()
Get the expression from the box, maybe throw a JBCError if a ParseError occurs. This is meant to be called by a Controller, in general. The expression associated with this ExpressionInput can only change when this method is called; it DOES NOT change continuously as the user types.- Specified by:
checkInput
in interfaceInputObject
-
setText
public void setText(java.lang.String str)
Set the text displayed in this input box. This overrides TextField.setText to make sure that the expression will be recomputed the next time checkInput() is called.- Overrides:
setText
in classjava.awt.TextField
-
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 classjava.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 classjava.awt.TextComponent
-
-