net.kolls.railworld
Class TrainControl

java.lang.Object
  extended by java.awt.Component
      extended by java.awt.Container
          extended by javax.swing.JComponent
              extended by javax.swing.JPanel
                  extended by net.kolls.railworld.TrainControl
All Implemented Interfaces:
java.awt.image.ImageObserver, java.awt.MenuContainer, java.io.Serializable, java.lang.Runnable, javax.accessibility.Accessible, SaveLoad
Direct Known Subclasses:
AutoControl, MixControl, UserControl

public abstract class TrainControl
extends javax.swing.JPanel
implements java.lang.Runnable, SaveLoad

A train controller provides a method for trains to be controlled (the throttle, brake, etc) Controllers also present a visible appearance as a panel to the user. The panel may allow the user to request behavior from the controller. The panel also includes a consist report as well as the weight, speed, and length of the train.

Author:
Steve Kollmansberger
See Also:
Serialized Form

Nested Class Summary
 
Nested classes/interfaces inherited from class javax.swing.JPanel
javax.swing.JPanel.AccessibleJPanel
 
Nested classes/interfaces inherited from class javax.swing.JComponent
javax.swing.JComponent.AccessibleJComponent
 
Nested classes/interfaces inherited from class java.awt.Container
java.awt.Container.AccessibleAWTContainer
 
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
protected  ScriptManager _s
          The script manager to notify about events.
protected  javax.swing.JPanel consist
          Label containing the "consist" Collection of cars
protected  javax.swing.JLabel length
          Label displaying current length
protected  Train myT
          The train being controlled
protected  Car selected
          The selected car in the train, or null.
protected  javax.swing.JLabel speed
          Label displaying current speed
protected  javax.swing.JLabel weight
          Label displaying current weight
 
Fields inherited from class javax.swing.JComponent
accessibleContext, listenerList, TOOL_TIP_TEXT_KEY, ui, UNDEFINED_CONDITION, WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, WHEN_FOCUSED, WHEN_IN_FOCUSED_WINDOW
 
Fields inherited from class java.awt.Component
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
TrainControl()
          Create a controller.
 
Method Summary
 void attach(Train t)
          The consist report, weight, length, and speed are added to the panel, which is laid out using BoxLayout.
 void deselect()
          Called when the train is deselected.
 void fillConsist()
          Reset the consist.
 Car getSelected()
           
 Train getTrain()
           
 ScriptManager getTrainActionScriptNotify()
          Get the script manager
 java.lang.Object newInstance()
          like getClass().newInstance().
 boolean process()
          Perform any processing needed before the display is to be updated.
 void run()
          This method should be overriden, but ensure that super is called to update the weight, speed, and length display.
 void select()
          Called when the train is selected.
 void setSelected(Car c)
          The user selected a car.
 void setTrainActionScriptNotify(ScriptManager s)
          Update the script manager notified about events.
 
Methods inherited from class javax.swing.JPanel
getAccessibleContext, getUI, getUIClassID, paramString, setUI, updateUI
 
Methods inherited from class javax.swing.JComponent
addAncestorListener, addNotify, addVetoableChangeListener, computeVisibleRect, contains, createToolTip, disable, enable, firePropertyChange, firePropertyChange, firePropertyChange, fireVetoableChange, getActionForKeyStroke, getActionMap, getAlignmentX, getAlignmentY, getAncestorListeners, getAutoscrolls, getBaseline, getBaselineResizeBehavior, getBorder, getBounds, getClientProperty, getComponentGraphics, getComponentPopupMenu, getConditionForKeyStroke, getDebugGraphicsOptions, getDefaultLocale, getFontMetrics, getGraphics, getHeight, getInheritsPopupMenu, getInputMap, getInputMap, getInputVerifier, getInsets, getInsets, getListeners, getLocation, getMaximumSize, getMinimumSize, getNextFocusableComponent, getPopupLocation, getPreferredSize, getRegisteredKeyStrokes, getRootPane, getSize, getToolTipLocation, getToolTipText, getToolTipText, getTopLevelAncestor, getTransferHandler, getVerifyInputWhenFocusTarget, getVetoableChangeListeners, getVisibleRect, getWidth, getX, getY, grabFocus, isDoubleBuffered, isLightweightComponent, isManagingFocus, isOpaque, isOptimizedDrawingEnabled, isPaintingForPrint, isPaintingTile, isRequestFocusEnabled, isValidateRoot, paint, paintBorder, paintChildren, paintComponent, paintImmediately, paintImmediately, print, printAll, printBorder, printChildren, printComponent, processComponentKeyEvent, processKeyBinding, processKeyEvent, processMouseEvent, processMouseMotionEvent, putClientProperty, registerKeyboardAction, registerKeyboardAction, removeAncestorListener, removeNotify, removeVetoableChangeListener, repaint, repaint, requestDefaultFocus, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, resetKeyboardActions, reshape, revalidate, scrollRectToVisible, setActionMap, setAlignmentX, setAlignmentY, setAutoscrolls, setBackground, setBorder, setComponentPopupMenu, setDebugGraphicsOptions, setDefaultLocale, setDoubleBuffered, setEnabled, setFocusTraversalKeys, setFont, setForeground, setInheritsPopupMenu, setInputMap, setInputVerifier, setMaximumSize, setMinimumSize, setNextFocusableComponent, setOpaque, setPreferredSize, setRequestFocusEnabled, setToolTipText, setTransferHandler, setUI, setVerifyInputWhenFocusTarget, setVisible, unregisterKeyboardAction, update
 
Methods inherited from class java.awt.Container
add, add, add, add, add, addContainerListener, addImpl, addPropertyChangeListener, addPropertyChangeListener, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getComponentZOrder, getContainerListeners, getFocusTraversalKeys, getFocusTraversalPolicy, getLayout, getMousePosition, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusCycleRoot, isFocusTraversalPolicyProvider, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paintComponents, preferredSize, printComponents, processContainerEvent, processEvent, remove, remove, removeAll, removeContainerListener, setComponentZOrder, setFocusCycleRoot, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, setLayout, 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, createImage, createImage, createVolatileImage, createVolatileImage, disableEvents, dispatchEvent, enable, enableEvents, enableInputMethods, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getBackground, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusCycleRootAncestor, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getForeground, getGraphicsConfiguration, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputContext, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocale, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getName, getParent, getPeer, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getToolkit, getTreeLock, gotFocus, handleEvent, hasFocus, hide, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isPreferredSizeSet, isShowing, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, postEvent, prepareImage, prepareImage, processComponentEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processMouseWheelEvent, remove, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, resize, resize, setBounds, setBounds, setComponentOrientation, setCursor, setDropTarget, setFocusable, setFocusTraversalKeysEnabled, setIgnoreRepaint, setLocale, setLocation, setLocation, setName, setSize, setSize, show, show, size, toString, transferFocus, transferFocusUpCycle
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface net.kolls.railworld.io.SaveLoad
load, save, toString
 

Field Detail

weight

protected javax.swing.JLabel weight
Label displaying current weight


speed

protected javax.swing.JLabel speed
Label displaying current speed


length

protected javax.swing.JLabel length
Label displaying current length


consist

protected javax.swing.JPanel consist
Label containing the "consist" Collection of cars


myT

protected Train myT
The train being controlled


selected

protected Car selected
The selected car in the train, or null.


_s

protected ScriptManager _s
The script manager to notify about events.

Constructor Detail

TrainControl

public TrainControl()
Create a controller. By default, the controller does nothing. Call attach(Train) to attach the controller to a train.

Method Detail

attach

public void attach(Train t)
The consist report, weight, length, and speed are added to the panel, which is laid out using BoxLayout. Deriving controllers may added additional controls to the panel.

Parameters:
t - The initial train.

getTrainActionScriptNotify

public ScriptManager getTrainActionScriptNotify()
Get the script manager

Returns:
Script manager currently notified

setTrainActionScriptNotify

public void setTrainActionScriptNotify(ScriptManager s)
Update the script manager notified about events.

Parameters:
s - The script manager to notify.

fillConsist

public void fillConsist()
Reset the consist. This should be called whenever a change has happened to the train. For example, if any cars are loaded or unloaded, the consist must be reset.


getSelected

public Car getSelected()
Returns:
The selected Car, or null

setSelected

public void setSelected(Car c)
The user selected a car.

Parameters:
c - The selected Car.

getTrain

public Train getTrain()
Returns:
This train

deselect

public void deselect()
Called when the train is deselected. May override but be sure to call super.


select

public void select()
Called when the train is selected. May override but be sure to call super.


run

public void run()
This method should be overriden, but ensure that super is called to update the weight, speed, and length display. This method should also update any other controls. This method is called in the AWT Event loop when process() says so

Specified by:
run in interface java.lang.Runnable

process

public boolean process()
Perform any processing needed before the display is to be updated. This method is called every step in the game loop No GUI manipulation in this one, but if you changed something return true so that run() will be called to update the display

Returns:
true if the GUI needs to be updated

newInstance

public java.lang.Object newInstance()
Description copied from interface: SaveLoad
like getClass().newInstance(). Allows script objects to also be copied.

Specified by:
newInstance in interface SaveLoad
Returns:
A new instance of this class