| java.lang.Object edu.hws.jcm.awt.Controller
Controller | public class Controller implements java.io.Serializable,Computable,InputObject,AdjustmentListener,ActionListener,TextListener,ItemListener(Code) | | Controllers are the focus of all the action in the JCM system. A Controller can be
set to listen for changes (generally changes in user input). This is done by
registering the Controller with (usally) an InputObject. For example, if a Controller, c,
is to respond when the user presses return in a VariableInput, v, then
v.setOnUserAction(c) should be called to arrange to have the Controller listen
for such actions. VariableSliders, ExpressionInputs, MouseTrackers, Animators have a similar
methods. It is also possible to set the Controller to listen for events of
type AdjustmentEvent, ActionEvent, TextEvent, or ItemEvent (but this feature is
left over from an older version of JCM, and I'm not sure whether it's necessary).
Whenever a Controller learns of some change, it will process any InputObjects,
Ties, and Computables that have been registered with it.
InputObjects and Computables have to be added to a Controller to be processed,
using the Controller's add method. (If you build your inteface out of JCMPanels,
then this is done automatically.) (Note that an InputObject is added to a Controller
to have its value checked -- This is separate from registering the Controller to
listen for changes in the InputObject. Often, you have to do both.) The gatherInputs()
method in class JCMPanel can be used to do most of this registration automaticaly.
A Tie that synchronizes two or more Values, to be effective, has to be added to a Controller.
See the Tie class for inforamtion about what Ties are and how they are used.
A Controller can have an associated ErrorReporter, which is used to report any
errors that occur during the processing. Currently, an ErrorReporter is either
a DisplayCanvas or a MessagePopup.
A Controller can be added to another Controller, which then becomes a sub-controller.
Whenever the main Controller hears some action, it also notifies all its sub-controllers
about the action. Furthermore, it can report errors that occur in the sub-controllers,
if they don't have their own error reporters. (Usually, you will just set an error
reporter for the top-level Controller.)
|
Field Summary | |
protected Vector | computables Computable objects controlled by this controller. | protected String | errorMessage If non-null, this is an error message
that has been reported and not yet cleared. | protected ErrorReporter | errorReporter Used for reporting errors that occur in the
compute() method of this controller. | protected Vector | inputs InputObjects controlled by this controller. | protected Controller | parent The parent of this controller, if any. | protected Vector | ties Ties that have been added to this controller. |
Constructor Summary | |
public | Controller() Create a Controller. |
Method Summary | |
public void | actionPerformed(ActionEvent evt) Simply calls compute when the Controller hears an ActionEvent. | public void | add(Object obj) Add an object to be controlled by this controller. | public void | adjustmentValueChanged(AdjustmentEvent evt) Simply calls compute when the Controller hears an AdjustmantEvent. | public void | checkInput() Call checkInput() of each InputObject. | protected void | clearErrorMessage() Clear the error message. | public synchronized void | compute() When an contoller computes, it first calls checkInput() for any
InputOjects that it controls (including those in sub-controllers).
It then handles any Ties. | protected void | doCompute() Compute the Computables in this controller and its sub-controllers. | protected void | doTies() Check the Ties in this controller and its sub-controllers. | public void | errorCleared() Should be called by the ErrorReporter if the ErrorReporter clears the error itself. | public void | gatherInputs() Calles notifyControllerOnChange(this). | public ErrorReporter | getErrorReporter() Get the ErrorReporter for this Controller. | public void | itemStateChanged(ItemEvent evt) Simply calls compute when the Controller hears an ItemEvent. | public void | notifyControllerOnChange(Controller c) Method required by InputObject interface; in this class, calls the same method
recursively on any input objects controlled by this controller. | public void | remove(Object obj) Remove the object from the controller (if present). | public void | removeFromParent() If this controller has a parent, remove it from its parent. | public void | reportError(String message) Report the specified error message. | public void | setErrorReporter(ErrorReporter r) Set the ErrorReporter used to report errors that occur when the
compute() method of this Controller is executed. | public void | textValueChanged(TextEvent evt) Simply calls compute when the Controller hears a TextEvent. |
computables | protected Vector computables(Code) | | Computable objects controlled by this controller. Note that Controllers
are Computables, so this list can include sub-controllers.
|
errorMessage | protected String errorMessage(Code) | | If non-null, this is an error message
that has been reported and not yet cleared.
|
errorReporter | protected ErrorReporter errorReporter(Code) | | Used for reporting errors that occur in the
compute() method of this controller. If the errorReporter
is null and if this controller has a parent,
then the parent will report the error. If
no ancestor has an errorReporter, the error
message is written to standard output.
|
inputs | protected Vector inputs(Code) | | InputObjects controlled by this controller. Note that Controllers
are InputObjects, so this list can include sub-controllers.
|
parent | protected Controller parent(Code) | | The parent of this controller, if any.
This is set automatically when one
controller is added to another.
|
ties | protected Vector ties(Code) | | Ties that have been added to this controller.
|
Controller | public Controller()(Code) | | Create a Controller.
|
actionPerformed | public void actionPerformed(ActionEvent evt)(Code) | | Simply calls compute when the Controller hears an ActionEvent.
This is not meant to be called directly.
|
add | public void add(Object obj)(Code) | | Add an object to be controlled by this controller. It should be of
one or more of the types InputObject, Computable, Tie. If it is
a Controller, then this Controller becomes its parent.
|
adjustmentValueChanged | public void adjustmentValueChanged(AdjustmentEvent evt)(Code) | | Simply calls compute when the Controller hears an AdjustmantEvent.
This is not meant to be called directly.
|
checkInput | public void checkInput()(Code) | | Call checkInput() of each InputObject. Can throw a JCMError.
This is mostly meant to be called by Controller.compute().
Note that this will recurse though any sub-controllers of
this controller, so that when comput() is called,
all the InputObjects in the sub-controllers
are processed before ANY Tie or Computable is processed.
Similarly, the Ties and Computables in the sub-controllers
are processed in separate passes.
|
clearErrorMessage | protected void clearErrorMessage()(Code) | | Clear the error message.
|
compute | public synchronized void compute()(Code) | | When an contoller computes, it first calls checkInput() for any
InputOjects that it controls (including those in sub-controllers).
It then handles any Ties. Finally,
it calls the compute() method of any Computables. If an error
occurs, it reports it. JCMErrors (which should represent errors
on the part of the user) will generally only occur during the
checkInput() phase. Internal, programmer errors can occur at
any time and might leave the sytem in an unhappy state. They are
reported as debugging aids for the programmer. When one occurs,
a stack trace is printed to standard output.
|
doCompute | protected void doCompute()(Code) | | Compute the Computables in this controller and its sub-controllers.
|
doTies | protected void doTies()(Code) | | Check the Ties in this controller and its sub-controllers.
|
errorCleared | public void errorCleared()(Code) | | Should be called by the ErrorReporter if the ErrorReporter clears the error itself.
(This is only used to avoid repeatedly setting the same error message, during an
animation for example.)
|
gatherInputs | public void gatherInputs()(Code) | | Calles notifyControllerOnChange(this). That is, it sets all the InputObjects in
this Controller, and in subcontrollers, to notify this Controller when they change.
|
getErrorReporter | public ErrorReporter getErrorReporter()(Code) | | Get the ErrorReporter for this Controller. Return null if there is none.
|
itemStateChanged | public void itemStateChanged(ItemEvent evt)(Code) | | Simply calls compute when the Controller hears an ItemEvent.
This is not meant to be called directly.
|
notifyControllerOnChange | public void notifyControllerOnChange(Controller c)(Code) | | Method required by InputObject interface; in this class, calls the same method
recursively on any input objects controlled by this controller. This is meant to
be called by JCMPanel.gatherInputs().
|
remove | public void remove(Object obj)(Code) | | Remove the object from the controller (if present).
|
removeFromParent | public void removeFromParent()(Code) | | If this controller has a parent, remove it from its parent. (Then, a call to the
former parent's compute() method will not call this controller's compute().)
|
reportError | public void reportError(String message)(Code) | | Report the specified error message.
|
setErrorReporter | public void setErrorReporter(ErrorReporter r)(Code) | | Set the ErrorReporter used to report errors that occur when the
compute() method of this Controller is executed.
|
textValueChanged | public void textValueChanged(TextEvent evt)(Code) | | Simply calls compute when the Controller hears a TextEvent.
This is not meant to be called directly.
|
|
|