Overview | Package | Class | Tree | Deprecated | Index | Help
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD

## sim.display
Class Console

    java.lang.Object
      java.awt.Component
          java.awt.Container
              java.awt.Window
                  java.awt.Frame
                      javax.swing.JFrame
                          sim.display.Console

All Implemented Interfaces:
  javax.accessibility.Accessible, Controller, java.awt.image.ImageObserver, java.awt.MenuContainer, javax.swing.RootPaneContainer, java.io.Serializable, javax.swing.WindowConstants

public class Console
extends javax.swing.JFrame
implements Controller

Console is an elaborate Controller which provides a variety of GUI niceties to control the basics of a simulation. Most significantly it provides:

- Playing, stopping, pausing, stepping, and various associated controls
- View of the current time and frame rate
- Control of the random number generator
- An HTML "page" of information about the model
- Loading and saving checkpointed simulations, and starting new simulation classes
- Hiding and showing simulation displays
- Storage for inspectors

Console maintains the underlying play thread of the model, and handles much of the complexities that come with doing threads.

When you create new simulations (by frobbing the "New Simulation..." menu), you're presented with a ComboBox. Here you can type in any simulation class you like, or you can pick from a collection of pre-defined classes. The pre-defined class names are stored in the text file "simulation.classes", located in the same directory as the Console.class file. Feel free to edit it.

While normally you'd start a MASON application by running a main() method created by the developer, you can also fire up the Console directly and pick a model from the aforementioned ComboBox. To do this, simply run `java sim.display.Console`

If you attach a Frame to the Console, it will appear in the Console's "Displays" tab, where the user has control over hiding and showing various frames. The best time to do such attaching is during your GUIState's init() method. Such Frames should be set to hide (not dispose) when closed. JFrames do this by default.

Console places itself on-screen using the following rule. First it moves itself to an unusual location (presently -10000 x -10000). Then it calls init() on your GUIState. If in init() you move the Console to a position, then that's where it will stay. If not, then the Console looks up all the Frames attached to it during init() and places itself to the right of the rightmost such Frame, if there is room on the main display. If not, then Console puts itself in its default position (typically the top left corner of the screeen).

Console generates a mammoth number of anonymous subclasses. Well, such is life with a complicated GUI I guess. Don't be daunted by them -- almost all of them are little tiny things like Runnables to pass into SwingUtilities.invokeLater() or various anonymous listeners and adapters for buttons and text fields etc.

See Also:
  Serialized Form

Nested Class Summary

Nested classes inherited from class javax.swing.JFrame
`javax.swing.JFrame.AccessibleJFrame`

Nested classes inherited from class java.awt.Frame
`java.awt.Frame.AccessibleAWTFrame`

Nested classes inherited from class java.awt.Window
`java.awt.Window.AccessibleAWTWindow`

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
`static boolean` | `allowOtherClassNames` Do we only allow the user to type in other classNames?
`static java.util.Vector` | `classNames` List of fully qualified classnames to include in the Console's "New Simulation" combo box
`static int` | `DEFAULT_GUTTER` When the Console is laid out to the right of some window, the space allocated between it and the window
`static int` | `DEFAULT_HEIGHT` Default height of the Console.
`static int` | `DEFAULT_WIDTH` Default width of the Console.
`static javax.swing.ImageIcon` | `I_PAUSE_OFF`
`static javax.swing.ImageIcon` | `I_PAUSE_ON`
`static javax.swing.ImageIcon` | `I_PLAY_OFF`
`static javax.swing.ImageIcon` | `I_PLAY_ON`
`static javax.swing.ImageIcon` | `I_STEP_OFF`
`static javax.swing.ImageIcon` | `I_STEP_ON`
`static javax.swing.ImageIcon` | `I_STOP_OFF`
`static javax.swing.ImageIcon` | `I_STOP_ON`
`static int` | `PS_PAUSED` The play thread is presently paused.
`static int` | `PS_PLAYING` The play thread is presently playing.
`static int` | `PS_STOPPED` The play thread is presently stopped.
`static java.util.Vector` | `shortNames` List of short descriptive names for the classes in classNames.
`GUIState` | `simulation` Our simulation

Fields inherited from class javax.swing.JFrame
`accessibleContext, EXIT_ON_CLOSE, rootPane, rootPaneCheckingEnabled`

Fields inherited from class java.awt.Frame
`CROSSHAIR_CURSOR, DEFAULT_CURSOR, E_RESIZE_CURSOR, HAND_CURSOR, ICONIFIED, MAXIMIZED_BOTH, MAXIMIZED_HORIZ, MAXIMIZED_VERT, MOVE_CURSOR, N_RESIZE_CURSOR, NE_RESIZE_CURSOR, NORMAL, NW_RESIZE_CURSOR, S_RESIZE_CURSOR, SE_RESIZE_CURSOR, SW_RESIZE_CURSOR, TEXT_CURSOR, W_RESIZE_CURSOR, WAIT_CURSOR`

Fields inherited from class java.awt.Component
`BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT`

Fields inherited from interface javax.swing.WindowConstants
`DISPOSE_ON_CLOSE, DO_NOTHING_ON_CLOSE, HIDE_ON_CLOSE`

Fields inherited from interface java.awt.image.ImageObserver
`ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH`

Constructor Summary
`Console(GUIState simulation)` Creates a Console, using the default initial start behavior (INITIAL_BEHAVIOR_START).

Method Summary
`void` | `doAbout()`
`void` | `doChangeCode(java.lang.Runnable r)` This method will interrupt the simulation (pause it), call your runnable, then continue (uninterrupt) the simulation.
`void` | `doClose()` Closes the Console and shuts down the simulation.
`void` | `doNew()` Pops up a window allowing the user to enter in a class name to start a new simulation.
`void` | `doOpen()` Reverts the current simulation to the simulation stored at a user-specified checkpoint filename.
`void` | `doQuit()` Quits the program.
`void` | `doSave()` Lets the user checkpoint out a simulation to the last checkpoint filename.
`void` | `doSaveAs()` Lets the user checkpoint out a simulation to a file with a given name.
`long` | `getPlaySleep()` Gets how long we should sleep between each step in the play thread (in milliseconds).
`int` | `getPlayState()` Gets whether or not the current thread is PS_PLAYING, PS_STOPPED, or PS_PAUSED.
`boolean` | `getShouldRepeat()` Get whether or not the simualtion should repeat when the stop button is pressed.
`double` | `getStepsPerSecond()` Returns the frame rate.
`javax.swing.JTabbedPane` | `getTabPane()` Simulations can call this to get access to the tabPane -- to add tabbed panes as they like.
`int` | `getThreadPriority()` Get when the simulation should end.
`long` | `getWhenShouldEnd()` Get when the simulation should end.
`double` | `getWhenShouldEndTime()` Get when the simulation should end.
`long` | `getWhenShouldPause()` Get when the simulation should pause.
`double` | `getWhenShouldPauseTime()` Get when the simulation should pause.
`static javax.swing.ImageIcon` | `iconFor(java.lang.String name)` Returns icons for a given filename, such as "NotPlaying.png".
`void` | `informOfError(java.lang.Throwable error, java.lang.String errorDescription)` Pops up an error dialog box.
`static void` | `main(java.lang.String[] args)` Pops up a window allowing the user to enter in a class name to start a new simulation.
`void` | `pressPause()` Called when the user presses the pause button.
`void` | `pressPlay()` Called when the user presses the play button.
`void` | `pressStop()` Called when the user presses the stop button.
`void` | `refresh()` Lazily updates and redraws all the displays and inspectors.
`boolean` | `registerFrame(javax.swing.JFrame frame)` Simulations can call this to add a frame to be listed in the "Display list" of the console
`void` | `registerInspector(Inspector inspector, Stoppable stopper)` Registers an inspector to be Stopped if necessary in the future.
`void` | `removeAllInspectors(boolean killDraggedOutWindowsToo)` Stops and removes all inspectors.
`void` | `setInspectors(Bag inspectors, Bag names)` Adds new inspectors to the Console's list, given the provided inspectors, their portrayals, and appropriate names for them.
`void` | `setPlaySleep(long sleep)` Sets (in milliseconds) how long we should sleep between each step in the play thread.
`void` | `setShouldRepeat(boolean val)` Set whether or not the simualtion should repeat when the stop button is pressed.
`void` | `setThreadPriority(int val)` Set when the simulation should end.
`void` | `setWhenShouldEnd(long val)` Set when the simulation should end.
`void` | `setWhenShouldEndTime(double val)` Set when the simulation should end.
`void` | `setWhenShouldPause(long val)` Sets when the simulation should pause.
`void` | `setWhenShouldPauseTime(double val)` Sets when the simulation should pause.
`void` | `stopAllInspectors(boolean killDraggedOutWindowsToo)` Stops all inspectors.
`boolean` | `unregisterAllFrames()` Simulations can call this to clear out the "Display list" of the console
`boolean` | `unregisterFrame(javax.swing.JFrame frame)` Simulations can call this to remove a frame from the "Display list" of the console

Methods inherited from class javax.swing.JFrame
`addImpl, createRootPane, frameInit, getAccessibleContext, getContentPane, getDefaultCloseOperation, getGlassPane, getJMenuBar, getLayeredPane, getRootPane, isDefaultLookAndFeelDecorated, isRootPaneCheckingEnabled, paramString, processWindowEvent, remove, setContentPane, setDefaultCloseOperation, setDefaultLookAndFeelDecorated, setGlassPane, setJMenuBar, setLayeredPane, setLayout, setRootPane, setRootPaneCheckingEnabled, update`

Methods inherited from class java.awt.Frame
`addNotify, finalize, getCursorType, getExtendedState, getFrames, getIconImage, getMaximizedBounds, getMenuBar, getState, getTitle, isResizable, isUndecorated, remove, removeNotify, setCursor, setExtendedState, setIconImage, setMaximizedBounds, setMenuBar, setResizable, setState, setTitle, setUndecorated`

Methods inherited from class java.awt.Window
`addPropertyChangeListener, addPropertyChangeListener, addWindowFocusListener, addWindowListener, addWindowStateListener, applyResourceBundle, applyResourceBundle, createBufferStrategy, createBufferStrategy, dispose, getBufferStrategy, getFocusableWindowState, getFocusCycleRootAncestor, getFocusOwner, getFocusTraversalKeys, getGraphicsConfiguration, getInputContext, getListeners, getLocale, getMostRecentFocusOwner, getOwnedWindows, getOwner, getToolkit, getWarningString, getWindowFocusListeners, getWindowListeners, getWindowStateListeners, hide, isActive, isFocusableWindow, isFocusCycleRoot, isFocused, isShowing, pack, postEvent, processEvent, processWindowFocusEvent, processWindowStateEvent, removeWindowFocusListener, removeWindowListener, removeWindowStateListener, setCursor, setFocusableWindowState, setFocusCycleRoot, setLocationRelativeTo, show, toBack, toFront`

Methods inherited from class java.awt.Container
`add, add, add, add, add, addContainerListener, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getAlignmentX, getAlignmentY, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getContainerListeners, getFocusTraversalPolicy, getInsets, getLayout, getMaximumSize, getMinimumSize, getPreferredSize, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paint, paintComponents, preferredSize, print, printComponents, processContainerEvent, remove, removeAll, removeContainerListener, setFocusTraversalKeys, setFocusTraversalPolicy, setFont, 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, contains, createImage, createImage, createVolatileImage, createVolatileImage, disable, disableEvents, dispatchEvent, enable, enable, enableEvents, enableInputMethods, firePropertyChange, firePropertyChange, firePropertyChange, getBackground, getBounds, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getFontMetrics, getForeground, getGraphics, getHeight, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocation, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMouseWheelListeners, getName, getParent, getPeer, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getSize, getTreeLock, getWidth, getX, getY, gotFocus, handleEvent, hasFocus, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isDoubleBuffered, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isOpaque, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, prepareImage, prepareImage, printAll, processComponentEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processKeyEvent, processMouseEvent, processMouseMotionEvent, processMouseWheelEvent, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, repaint, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, reshape, resize, resize, setBackground, setBounds, setBounds, setComponentOrientation, setDropTarget, setEnabled, setFocusable, setFocusTraversalKeysEnabled, setForeground, setIgnoreRepaint, setLocale, setLocation, setLocation, setName, setSize, setSize, setVisible, show, size, toString, transferFocus, transferFocusUpCycle`

Methods inherited from class java.lang.Object
`clone, equals, getClass, hashCode, notify, notifyAll, wait, wait, wait`

Methods inherited from interface java.awt.MenuContainer
`getFont, postEvent`

Field Detail

### DEFAULT_WIDTH

    public static final int DEFAULT_WIDTH

  Default width of the Console.

  See Also:
    Constant Field Values

### DEFAULT_HEIGHT

    public static final int DEFAULT_HEIGHT

  Default height of the Console.

  See Also:
    Constant Field Values

### DEFAULT_GUTTER

    public static final int DEFAULT_GUTTER

  When the Console is laid out to the right of some window, the space allocated between it and the window

  See Also:
    Constant Field Values

### simulation

    public GUIState simulation

  Our simulation

### classNames

    public static java.util.Vector classNames

  List of fully qualified classnames to include in the Console's "New Simulation" combo box

### shortNames

    public static java.util.Vector shortNames

  List of short descriptive names for the classes in classNames. If any one of them is null, then the name must be fetched using the GUIState.getName(class) method

### allowOtherClassNames

    public static boolean allowOtherClassNames

  Do we only allow the user to type in other classNames?

### I_PLAY_ON

    public static final javax.swing.ImageIcon I_PLAY_ON

### I_PLAY_OFF

    public static final javax.swing.ImageIcon I_PLAY_OFF

### I_STOP_ON

    public static final javax.swing.ImageIcon I_STOP_ON

### I_STOP_OFF

    public static final javax.swing.ImageIcon I_STOP_OFF

### I_PAUSE_ON

    public static final javax.swing.ImageIcon I_PAUSE_ON

### I_PAUSE_OFF

    public static final javax.swing.ImageIcon I_PAUSE_OFF

### I_STEP_ON

    public static final javax.swing.ImageIcon I_STEP_ON

### I_STEP_OFF

    public static final javax.swing.ImageIcon I_STEP_OFF

### PS_STOPPED

    public static final int PS_STOPPED

  The play thread is presently stopped.

  See Also:
    Constant Field Values

### PS_PLAYING

    public static final int PS_PLAYING

  The play thread is presently playing.

  See Also:
    Constant Field Values

### PS_PAUSED

    public static final int PS_PAUSED

  The play thread is presently paused.

  See Also:
    Constant Field Values

Constructor Detail

### Console

    public Console(GUIState simulation)

  Creates a Console, using the default initial start behavior (INITIAL_BEHAVIOR_START). Sets the simulation's controller to point to this Console.

Method Detail

### iconFor

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

  Returns icons for a given filename, such as "NotPlaying.png". A utility function.

### setShouldRepeat

    public void setShouldRepeat(boolean val)

  Set whether or not the simualtion should repeat when the stop button is pressed.

### getShouldRepeat

    public boolean getShouldRepeat()

  Get whether or not the simualtion should repeat when the stop button is pressed.

### setThreadPriority

    public void setThreadPriority(int val)

  Set when the simulation should end.

### getThreadPriority

    public int getThreadPriority()

  Get when the simulation should end.

### setWhenShouldEnd

    public void setWhenShouldEnd(long val)

  Set when the simulation should end.

### getWhenShouldEnd

    public long getWhenShouldEnd()

  Get when the simulation should end.

### setWhenShouldPause

    public void setWhenShouldPause(long val)

  Sets when the simulation should pause.

### getWhenShouldPause

    public long getWhenShouldPause()

  Get when the simulation should pause.

### setWhenShouldEndTime

    public void setWhenShouldEndTime(double val)

  Set when the simulation should end.

### getWhenShouldEndTime

    public double getWhenShouldEndTime()

  Get when the simulation should end.

### setWhenShouldPauseTime

    public void setWhenShouldPauseTime(double val)

  Sets when the simulation should pause.

### getWhenShouldPauseTime

    public double getWhenShouldPauseTime()

  Get when the simulation should pause.

### setPlaySleep

    public void setPlaySleep(long sleep)

  Sets (in milliseconds) how long we should sleep between each step in the play thread. This method is run as a doChangeCode so it can interrupt the possibly sleeping thread and give it a new interval.

### getPlaySleep

    public long getPlaySleep()

  Gets how long we should sleep between each step in the play thread (in milliseconds).

### getPlayState

    public int getPlayState()

  Gets whether or not the current thread is PS_PLAYING, PS_STOPPED, or PS_PAUSED.

### getTabPane

    public javax.swing.JTabbedPane getTabPane()

  Simulations can call this to get access to the tabPane -- to add tabbed panes as they like.

### informOfError

    public void informOfError(java.lang.Throwable error,
                              java.lang.String errorDescription)

  Pops up an error dialog box. error should be the error proper, and errorDescription should be some user-informative item that's shown first (the user must explicitly ask to be shown the raw error itself). The error is also printed to the console.

### doQuit

    public void doQuit()

  Quits the program. Called by the Quit menu option.

### doClose

    public void doClose()

  Closes the Console and shuts down the simulation. Quits the program only if other simulations are not running in the same program. Called when the user clicks on the close button of the Console, or during a program-wide doQuit() process. Can also be called programmatically.

### main

    public static void main(java.lang.String[] args)

  Pops up a window allowing the user to enter in a class name to start a new simulation.

### doAbout

    public void doAbout()

### doNew

    public void doNew()

  Pops up a window allowing the user to enter in a class name to start a new simulation.

### doSaveAs

    public void doSaveAs()

  Lets the user checkpoint out a simulation to a file with a given name.

### doSave

    public void doSave()

  Lets the user checkpoint out a simulation to the last checkpoint filename.

### doOpen

    public void doOpen()

  Reverts the current simulation to the simulation stored at a user-specified checkpoint filename.

### pressStop

    public void pressStop()

  Called when the user presses the stop button. You can call this as well to simulate the same.

### pressPause

    public void pressPause()

  Called when the user presses the pause button. You can call this as well to simulate the same. Keep in mind that pause is a toggle.

### pressPlay

    public void pressPlay()

  Called when the user presses the play button. You can call this as well to simulate the same. Keep in mind that play will change to step if pause is down.

### getStepsPerSecond

    public double getStepsPerSecond()

  Returns the frame rate. If val is <= 0, then the frame rate is presently unknown.

### registerFrame

    public boolean registerFrame(javax.swing.JFrame frame)

  Simulations can call this to add a frame to be listed in the "Display list" of the console

  Specified by:
    `registerFrame` in interface `Controller`

### unregisterFrame

    public boolean unregisterFrame(javax.swing.JFrame frame)

  Simulations can call this to remove a frame from the "Display list" of the console

  Specified by:
    `unregisterFrame` in interface `Controller`

### unregisterAllFrames

    public boolean unregisterAllFrames()

  Simulations can call this to clear out the "Display list" of the console

  Specified by:
    `unregisterAllFrames` in interface `Controller`

### doChangeCode

    public void doChangeCode(java.lang.Runnable r)

  Description copied from interface: `Controller`
  This method will interrupt the simulation (pause it), call your runnable, then continue (uninterrupt) the simulation. This allows you to guarantee a way to change the model from a separate thread -- for example, the Swing event thread -- in a synchronous, blocking fashion.

  You have other options for updating the model from external threads. One option is to add a Steppable to GUIState's scheduleImmediate(...) queue. When the Steppable is stepped, it will be done so inside the model's thread. This is asynchronous (non-blocking), however.

  Alternatively, you can synchronize on state.schedule and run your code. This is synchronous.

  Specified by:
    `doChangeCode` in interface `Controller`

### refresh

    public void refresh()

  Description copied from interface: `Controller`
  Lazily updates and redraws all the displays and inspectors. Do not call this method from the model thread -- only from the Swing event thread. This is an expensive procedure and should not be done unless necessary. Typically it's done in response to some event (a button press etc.) rather than in the model itself.

  Specified by:
    `refresh` in interface `Controller`

### setInspectors

    public void setInspectors(Bag inspectors,
                              Bag names)

  Adds new inspectors to the Console's list, given the provided inspectors, their portrayals, and appropriate names for them. These bags must match in size, else an exception will be thrown.

  Specified by:
    `setInspectors` in interface `Controller`

### registerInspector

    public void registerInspector(Inspector inspector,
                                  Stoppable stopper)

  Registers an inspector to be Stopped if necessary in the future. This automatically happens if you call setInspectors(...).

  Specified by:
    `registerInspector` in interface `Controller`

### stopAllInspectors

    public void stopAllInspectors(boolean killDraggedOutWindowsToo)

  Stops all inspectors. If killDraggedOutWindowsToo is true, then the detatched inspectors are stopped as well.

### removeAllInspectors

    public void removeAllInspectors(boolean killDraggedOutWindowsToo)

  Stops and removes all inspectors. If killDraggedOutWindowsToo is true, then all inspector windows will be closed; else only the inspectors presently embedded in the console will be stopped and removed.

Overview | Package | Class | Tree | Deprecated | Index | Help
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD