edu.kzoo.grid.gui
Class SteppedGridAppFrame

java.lang.Object
  |
  +--java.awt.Component
        |
        +--java.awt.Container
              |
              +--java.awt.Window
                    |
                    +--java.awt.Frame
                          |
                          +--javax.swing.JFrame
                                |
                                +--edu.kzoo.grid.gui.GridAppFrame
                                      |
                                      +--edu.kzoo.grid.gui.SteppedGridAppFrame
All Implemented Interfaces:
javax.accessibility.Accessible, GridDisplay, java.awt.image.ImageObserver, java.awt.MenuContainer, javax.swing.RootPaneContainer, java.io.Serializable, javax.swing.WindowConstants

public class SteppedGridAppFrame
extends GridAppFrame

Grid GUI Support Package:
The SteppedGridAppFrame class provides a window in which to run and display a grid application controlled by the user via a combination of Step, NSteps, Run, and Stop buttons. Other options provided by the GridAppFrame superclass include a speed slider bar and a Start/Restart button.

Version:
1 September 2004
Author:
Alyce Brady (based on code by Julie Zelenski)
See Also:
Serialized Form

Nested Class Summary
 
Nested classes inherited from class edu.kzoo.grid.gui.GridAppFrame
GridAppFrame.DisplayMouseListener, GridAppFrame.GUIExceptionHandler
 
Field Summary
protected  SteppedGridAppController appController
           
protected  boolean displayAfterEachStep
           
protected  int numStepsSoFar
           
protected  int numStepsToRun
           
protected  boolean runningNSteps
           
protected  javax.swing.Timer timer
           
 
Fields inherited from class edu.kzoo.grid.gui.GridAppFrame
DEFAULT_MAX_DELAY_MSECS, DEFAULT_MIN_DELAY_MSECS
 
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
SteppedGridAppFrame(SteppedGridAppController control, boolean displayAfterEachStep)
          Constructs an empty SteppedGridAppFrame window object that will display a grid controlled by a combination of Step, NSteps, Run, and Stop buttons.
 
Method Summary
 void enterNotRunningMode()
          Enables and disables GUI components as necessary when an application is not running.
protected  java.lang.String getClarificationResponse(int suggested)
          Provides a follow-up prompt for number of steps if initial response failed validation, and gets result.
 SteppedGridAppController getController()
          Returns the controller used to drive the application.
protected  java.lang.String getInitialResponse(int suggested)
          Provides inital prompt for number of steps and gets result.
 void includeRunButton()
          Includes the Run button in the control panel.
 void includeSetResetButton(java.lang.String label, int enableDisableIndicator, boolean displayAfterSetReset)
          Includes a set/initialize/reset button with the specified label.
 void includeSetResetButton(java.lang.String label, int enableDisableIndicator, boolean initiallyEnabled, boolean displayAfterSetReset)
          Includes a set/initialize/reset button with the specified label.
 void includeStepNTimesButton()
          Includes the Step N Times button in the control panel.
 void includeStepOnceButton()
          Includes the Step Once button in the control panel.
 void includeStopButton(boolean displayAfterStopping)
          Includes the Stop button in the control panel.
 void initialize()
          Sets up (initializes) or resets the application.
protected  javax.swing.JPanel makeControlPanel(java.lang.String title)
          Creates the control panel.
 void nSteps()
          Advances the application multiple (N) steps (where N is provided by the user in a dialog box) in a separate thread.
 void run()
          Starts a timer to repeatedly step the application at the speed currently indicated by the speed slider.
 void setGrid(Grid grid)
          Sets the Grid being displayed.
 boolean shouldStop()
          Determines whether a running application has reached a desired stopping state.
 void showDisplayAfterEachStep(boolean whetherToDisplay)
          Specifies whether or not to display the contents of the grid after each step.
 void showGrid()
          Shows the grid.
 void step()
          Advances the application one step.
 void stepAndDisplay()
          Advances the application one step and displays the grid if appropriate.
 void stop()
          Stops any existing timer currently stepping the application.
 
Methods inherited from class edu.kzoo.grid.gui.GridAppFrame
addGridChangeListener, componentRequiresGrid, componentsEnabledOnlyIfGridSet, componentsEnabledOnlyWhenRunning, componentsEnabledOnlyWhenWaiting, constructDisplay, constructWindowContents, constructWindowContents, defineContent, enableAndDisable, enableOnlyIfGridSet, enableOnlyWhenRunning, enableOnlyWhenWaiting, enterRunningMode, getControlPanel, getDelay, getDisplay, getGrid, getMouseListenerForDisplay, getSpeedSlider, includeControlComponent, includeControlComponent, includeControlComponents, includeMenu, includeMenu, includeSpeedSlider, includeSpeedSlider, includeSpeedSlider, isInRunningMode, makeDisplayPanel, makeSliderPanel, notifyGridChangeListeners, onMousePressOverDisplay, resetDelay, setDelay, setEnabledStatus
 
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

appController

protected SteppedGridAppController appController

timer

protected javax.swing.Timer timer

displayAfterEachStep

protected boolean displayAfterEachStep

runningNSteps

protected boolean runningNSteps

numStepsToRun

protected int numStepsToRun

numStepsSoFar

protected int numStepsSoFar
Constructor Detail

SteppedGridAppFrame

public SteppedGridAppFrame(SteppedGridAppController control,
                           boolean displayAfterEachStep)
Constructs an empty SteppedGridAppFrame window object that will display a grid controlled by a combination of Step, NSteps, Run, and Stop buttons. Use methods such as includeStepOnceButton, includeRunButton, and includeStopButton, as well as the includeSetUpButton and includeSpeedSlider methods from GridAppFrame, to include components on the frame. Then use the constructWindowContents method to set the properties of the window and make it visible. The displayAfterEachStep parameter specifies whether the user interface should display the contents of the grid after each individual step (once each time the Step button is pressed, repeatedly when the NSteps or Run buttons are pressed). (Precondition: control is not null.)

Parameters:
control - the object that controls the running of the grid application through step and/or run methods
displayAfterEachStep - true if the user interface should display the contents of the grid after each individual step; false otherwise
Method Detail

includeSetResetButton

public void includeSetResetButton(java.lang.String label,
                                  int enableDisableIndicator,
                                  boolean displayAfterSetReset)
Includes a set/initialize/reset button with the specified label. This method will have no effect unless it is called before the constructWindowContents method.

Parameters:
label - the button label (examples: "Initialize", "Start", "Restart", "Reset")
enableDisableIndicator - indicates when the set/reset button should be enabled or disabled
displayAfterSetReset - true if grid should be displayed after set/reset is complete; false otherwise

includeSetResetButton

public void includeSetResetButton(java.lang.String label,
                                  int enableDisableIndicator,
                                  boolean initiallyEnabled,
                                  boolean displayAfterSetReset)
Includes a set/initialize/reset button with the specified label. The button starts out enabled (visible and usable) or disabled according to the initiallyEnabled parameter; it later switches to enabled or disabled under the conditions indicated by the enableDisableIndicator parameter. Note, though, that it will only switch if there is a state change that would normally cause it to switch. It will never switch, for example, if the enableDisableIndicator parameter is ALWAYS_ENABLED or ALWAYS_DISABLED, because there is no defined state change that would cause such components to switch. Thus, a component that is specified as ALWAYS_ENABLED but initially disabled will remain disabled throughout the application.

This method will have no effect unless it is called before the constructWindowContents method.

Parameters:
label - the button label (examples: "Initialize", "Start", "Restart", "Reset")
enableDisableIndicator - indicates when the set/reset button should be enabled or disabled
initiallyEnabled - true if button should initially be enabled; false if button should initially be disabled
displayAfterSetReset - true if grid should be displayed after set/reset is complete; false otherwise

includeStepOnceButton

public void includeStepOnceButton()
Includes the Step Once button in the control panel. This method will have no effect unless it is called before the constructWindowContents method.


includeStepNTimesButton

public void includeStepNTimesButton()
Includes the Step N Times button in the control panel. This method will have no effect unless it is called before the constructWindowContents method.


includeRunButton

public void includeRunButton()
Includes the Run button in the control panel. This method will have no effect unless it is called before the constructWindowContents method.


includeStopButton

public void includeStopButton(boolean displayAfterStopping)
Includes the Stop button in the control panel. This method will have no effect unless it is called before the constructWindowContents method.

Parameters:
displayAfterStopping - true if grid should be displayed after stop is complete; false otherwise

getController

public SteppedGridAppController getController()
Returns the controller used to drive the application.


showDisplayAfterEachStep

public void showDisplayAfterEachStep(boolean whetherToDisplay)
Specifies whether or not to display the contents of the grid after each step.

Parameters:
whetherToDisplay - true if the application should redisplay after each step; false otherwise

makeControlPanel

protected javax.swing.JPanel makeControlPanel(java.lang.String title)
Creates the control panel.

Overrides:
makeControlPanel in class GridAppFrame
Parameters:
title - description for this set of control components
Returns:
a panel containing the control components

setGrid

public void setGrid(Grid grid)
Sets the Grid being displayed. If the application is actively running, setGrid stops it.

Specified by:
setGrid in interface GridDisplay
Overrides:
setGrid in class GridAppFrame
Parameters:
grid - the Grid to display

showGrid

public void showGrid()
Shows the grid.

Specified by:
showGrid in interface GridDisplay
Overrides:
showGrid in class GridAppFrame

initialize

public void initialize()
Sets up (initializes) or resets the application.


stepAndDisplay

public void stepAndDisplay()
Advances the application one step and displays the grid if appropriate. Uses the Template Method pattern to make it easier to redefine the step behavior and still display only after the step has been completed.


step

public void step()
Advances the application one step.


shouldStop

public boolean shouldStop()
Determines whether a running application has reached a desired stopping state.

Returns:
true if the application should stop

nSteps

public void nSteps()
Advances the application multiple (N) steps (where N is provided by the user in a dialog box) in a separate thread. It may stop before the N steps have completed if the user clicks on the stop button (if one is provided) or if the application controller indicates that the application has reached a stopping state.


getInitialResponse

protected java.lang.String getInitialResponse(int suggested)
Provides inital prompt for number of steps and gets result.


getClarificationResponse

protected java.lang.String getClarificationResponse(int suggested)
Provides a follow-up prompt for number of steps if initial response failed validation, and gets result.


run

public void run()
Starts a timer to repeatedly step the application at the speed currently indicated by the speed slider. It will stop when the user clicks on the stop button or when the application controller indicates that the application has reached a stopping state. The step action happens in a separate thread from the graphical user interface.


stop

public void stop()
Stops any existing timer currently stepping the application.


enterNotRunningMode

public void enterNotRunningMode()
Enables and disables GUI components as necessary when an application is not running.

Overrides:
enterNotRunningMode in class GridAppFrame