Package edu.cnu.mdi.sim.ui
Class SimulationView
java.lang.Object
java.awt.Component
java.awt.Container
javax.swing.JComponent
javax.swing.JInternalFrame
edu.cnu.mdi.view.BaseView
edu.cnu.mdi.sim.ui.SimulationView
- All Implemented Interfaces:
IFeedbackProvider,ISimulationHost,SimulationListener,IFileDropHandler,ComponentListener,FocusListener,MouseListener,ImageObserver,MenuContainer,Serializable,EventListener,Accessible,RootPaneContainer,WindowConstants
- Direct Known Subclasses:
ImageEvolutionDemoView,NetworkDeclutterDemoView,TspDemoView
Base class for an MDI
BaseView that hosts a SimulationEngine.
This class is the "MDI bridge" for the MDI-agnostic simulation framework: the
simulation engine knows nothing about views/containers, while this view knows
how to repaint an IContainer on refresh and optionally hosts UI
components (control panel, diagnostics).
Layout
BaseView already installs the container component in
BorderLayout.CENTER (or inside a split pane), and may add a toolbar
in BorderLayout.NORTH. This class adds:
- Optional control panel in
BorderLayout.SOUTH - Optional diagnostics component on the right, installed by wrapping the
current CENTER component in a
JSplitPane
Threading
All SimulationListener callbacks arrive on the Swing EDT (as
guaranteed by SimulationEngine). Therefore,
onRefresh(SimulationContext) safely repaints the container
component.
- See Also:
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic interfaceFactory for creating a simulation control panel component.static interfaceFactory for creating an optional diagnostics component (e.g., plots/inspector) that will appear on the right side of a split pane.Nested classes/interfaces inherited from class javax.swing.JInternalFrame
JInternalFrame.AccessibleJInternalFrame, JInternalFrame.JDesktopIconNested classes/interfaces inherited from class javax.swing.JComponent
JComponent.AccessibleJComponentNested classes/interfaces inherited from class java.awt.Container
Container.AccessibleAWTContainerNested classes/interfaces inherited from class java.awt.Component
Component.AccessibleAWTComponent, Component.BaselineResizeBehavior, Component.BltBufferStrategy, Component.FlipBufferStrategy -
Field Summary
FieldsModifier and TypeFieldDescriptionprotected final JComponentOptional control panel component (may be null).protected final JComponentOptional diagnostics component (may be null).protected final JSplitPaneIf diagnostics is installed, this is the split pane (else null).protected SimulationEngineHosted engine (never null).Fields inherited from class edu.cnu.mdi.view.BaseView
container, desktop, infoDialog, properties, scrollPane, statusWP, viewPopupMenu, VIEWPROPNAME, virtualItemFields inherited from class javax.swing.JInternalFrame
closable, CONTENT_PANE_PROPERTY, desktopIcon, FRAME_ICON_PROPERTY, frameIcon, GLASS_PANE_PROPERTY, iconable, IS_CLOSED_PROPERTY, IS_ICON_PROPERTY, IS_MAXIMUM_PROPERTY, IS_SELECTED_PROPERTY, isClosed, isIcon, isMaximum, isSelected, LAYERED_PANE_PROPERTY, maximizable, MENU_BAR_PROPERTY, resizable, ROOT_PANE_PROPERTY, rootPane, rootPaneCheckingEnabled, title, TITLE_PROPERTYFields inherited from class javax.swing.JComponent
listenerList, TOOL_TIP_TEXT_KEY, ui, UNDEFINED_CONDITION, WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, WHEN_FOCUSED, WHEN_IN_FOCUSED_WINDOWFields inherited from class java.awt.Component
accessibleContext, BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENTFields inherited from interface java.awt.image.ImageObserver
ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTHFields inherited from interface javax.swing.WindowConstants
DISPOSE_ON_CLOSE, DO_NOTHING_ON_CLOSE, EXIT_ON_CLOSE, HIDE_ON_CLOSE -
Constructor Summary
ConstructorsConstructorDescriptionSimulationView(Simulation simulation, SimulationEngineConfig config, boolean includeControlPanel, SimulationView.ControlPanelFactory controlPanelFactory, boolean includeDiagnostics, SimulationView.DiagnosticFactory diagnosticFactory, double initialSplitFraction, Object... keyVals) Construct a simulation view with optional control panel and optional diagnostics panel.SimulationView(Simulation simulation, SimulationEngineConfig config, boolean includeControlPanel, SimulationView.ControlPanelFactory factory, Object... keyVals) Construct a simulation view with a caller-provided control panel factory.SimulationView(Simulation simulation, SimulationEngineConfig config, boolean includeControlPanel, Object... keyVals) Construct a simulation view with optional inclusion of the default control panel.SimulationView(Simulation simulation, Object... keyVals) Construct a simulation view using default engine configuration and including the default control panel. -
Method Summary
Modifier and TypeMethodDescriptionprotected JComponentGet the diagnostics component, if any.final SimulationEngineReturn theSimulationEnginehosted by this object.voidCalled when cancellation is requested viaSimulationEngine.requestCancel().voidonDone(SimulationContext ctx) Called when the engine ends normally (reachesSimulationState.TERMINATED).voidonFail(SimulationContext ctx, Throwable error) Called when the engine fails (reachesSimulationState.FAILED).voidonInit(SimulationContext ctx) Called after the engine transitions toSimulationState.INITIALIZING.voidonMessage(SimulationContext ctx, String message) Called for status/log messages intended for UI display.voidonPause(SimulationContext ctx) Called when the engine entersSimulationState.PAUSED.voidonProgress(SimulationContext ctx, ProgressInfo progress) Called for progress updates (indeterminate or determinate).voidonReady(SimulationContext ctx) Called when initialization completes and the engine reachesSimulationState.READY.voidDefault refresh behavior for MDI: repaint the container component.voidCalled when the engine resumes fromSimulationState.PAUSEDback toSimulationState.RUNNING.voidonRun(SimulationContext ctx) Called when the engine begins execution (entersSimulationState.RUNNING).protected voidCalled on the EDT after the first cancellation request.protected voidCalled on the EDT after normal termination.protected voidonSimulationFail(SimulationContext ctx, Throwable error) Called on the EDT after simulation failure.protected voidCalled on the EDT after simulation initialization begins.protected voidonSimulationMessage(SimulationContext ctx, String message) Called on the EDT when the simulation posts a status message.protected voidCalled on the EDT when the simulation pauses.protected voidonSimulationProgress(SimulationContext ctx, ProgressInfo progress) Called on the EDT when the simulation posts progress.protected voidCalled on the EDT when the initialized simulation becomes ready.protected voidCalled on the EDT before the view repaints in response to a refresh.protected voidCalled on the EDT when a paused simulation resumes.protected voidCalled on the EDT when the simulation first starts running.protected voidonSimulationStateChange(SimulationContext ctx, SimulationState from, SimulationState to, String reason) Called on the EDT after any engine state transition.voidonStateChange(SimulationContext ctx, SimulationState from, SimulationState to, String reason) Called on every state transition.protected final voidreplaceEngine(SimulationEngine newEngine) Replace the hosted engine and rebind the control panel on the EDT.protected final voidrequestEngineReset(Supplier<Simulation> simSupplier, Consumer<SimulationEngine> afterSwap, boolean autoStart, boolean refresh) Replace the engine immediately when safe, or stop the current run and replace it after termination.final voidStart the engine and immediately request that it run, on the EDT.Methods inherited from class edu.cnu.mdi.view.BaseView
addWestPanel, applyFocusFix, center, checkBooleanProperty, componentHidden, componentMoved, componentResized, componentShown, enableFileDrop, enableFileDrop, filesDropped, focusGained, focusLost, getAnnotationLayer, getCenterComponent, getConfigurationProperties, getConnectionLayer, getDefaultLayer, getFeedbackStrings, getFileFilter, getIContainer, getImageComponent, getInfoButton, getInsets, getIntProperty, getName, getParentFrame, getProperties, getPropertyName, getScrollPane, getSpecialClip, getToolBar, getViewInfo, getViewPopupMenu, getVirtualItem, handleMagnify, hoverClosed, hoverUpdate, initFeedback, initFeedback, isOnTop, isScrollable, isViewVisible, mouseClicked, mouseEntered, mouseExited, mousePressed, mouseReleased, offset, onFirstRealize, prepareForExit, refresh, resolveContainer, rightClicked, setAfterDraw, setBeforeDraw, setBooleanProperty, setFileFilter, setFromProperties, setIntProperty, setVirtualItem, viewInfoMethods inherited from class javax.swing.JInternalFrame
addImpl, addInternalFrameListener, createRootPane, dispose, doDefaultCloseAction, fireInternalFrameEvent, getAccessibleContext, getContentPane, getDefaultCloseOperation, getDesktopIcon, getDesktopPane, getFocusCycleRootAncestor, getFocusOwner, getFrameIcon, getGlassPane, getInternalFrameListeners, getJMenuBar, getLastCursor, getLayer, getLayeredPane, getMenuBar, getMostRecentFocusOwner, getNormalBounds, getRootPane, getTitle, getUI, getUIClassID, getWarningString, hide, isClosable, isClosed, isFocusCycleRoot, isIcon, isIconifiable, isMaximizable, isMaximum, isResizable, isRootPaneCheckingEnabled, isSelected, moveToBack, moveToFront, pack, paintComponent, paramString, remove, removeInternalFrameListener, reshape, restoreSubcomponentFocus, setClosable, setClosed, setContentPane, setCursor, setDefaultCloseOperation, setDesktopIcon, setFocusCycleRoot, setFrameIcon, setGlassPane, setIcon, setIconifiable, setJMenuBar, setLayer, setLayer, setLayeredPane, setLayout, setMaximizable, setMaximum, setMenuBar, setNormalBounds, setResizable, setRootPane, setRootPaneCheckingEnabled, setSelected, setTitle, setUI, show, toBack, toFront, updateUIMethods 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, getListeners, getLocation, getMaximumSize, getMinimumSize, getNextFocusableComponent, getPopupLocation, getPreferredSize, getRegisteredKeyStrokes, getSize, getToolTipLocation, getToolTipText, getToolTipText, getTopLevelAncestor, getTransferHandler, getVerifyInputWhenFocusTarget, getVetoableChangeListeners, getVisibleRect, getWidth, getX, getY, grabFocus, isDoubleBuffered, isLightweightComponent, isManagingFocus, isOpaque, isOptimizedDrawingEnabled, isPaintingForPrint, isPaintingOrigin, isPaintingTile, isRequestFocusEnabled, isValidateRoot, paint, paintBorder, paintChildren, 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, 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, updateMethods inherited from class java.awt.Container
add, add, add, add, add, addContainerListener, addPropertyChangeListener, addPropertyChangeListener, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getComponentZOrder, getContainerListeners, getFocusTraversalKeys, getFocusTraversalPolicy, getLayout, getMousePosition, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusTraversalPolicyProvider, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paintComponents, preferredSize, printComponents, processContainerEvent, processEvent, remove, removeAll, removeContainerListener, setComponentZOrder, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, transferFocusDownCycle, validate, validateTreeMethods 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, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getForeground, getGraphicsConfiguration, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputContext, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocale, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getParent, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getToolkit, getTreeLock, gotFocus, handleEvent, hasFocus, 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, requestFocus, requestFocus, requestFocusInWindow, resize, resize, setBounds, setBounds, setComponentOrientation, setDropTarget, setFocusable, setFocusTraversalKeysEnabled, setIgnoreRepaint, setLocale, setLocation, setLocation, setMixingCutoutShape, setName, setSize, setSize, show, size, toString, transferFocus, transferFocusBackward, transferFocusUpCycleMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitMethods inherited from interface edu.cnu.mdi.sim.ISimulationHost
cancelSimulation, getSimulationContext, getSimulationState, pauseSimulation, resumeSimulation, runSimulation, startSimulation, stopSimulationMethods inherited from interface edu.cnu.mdi.sim.SimulationListener
onCompleted
-
Field Details
-
engine
Hosted engine (never null). -
controlPanel
Optional control panel component (may be null). -
diagnostics
Optional diagnostics component (may be null). -
diagnosticsSplitPane
If diagnostics is installed, this is the split pane (else null).
-
-
Constructor Details
-
SimulationView
Construct a simulation view using default engine configuration and including the default control panel.- Parameters:
simulation- the simulation to run (non-null)keyVals- standardBaseViewkey-value arguments
-
SimulationView
public SimulationView(Simulation simulation, SimulationEngineConfig config, boolean includeControlPanel, Object... keyVals) Construct a simulation view with optional inclusion of the default control panel.- Parameters:
simulation- the simulation to run (non-null)config- engine configuration (non-null)includeControlPanel- if true, creates and adds the default control panel at SOUTHkeyVals- standardBaseViewkey-value arguments
-
SimulationView
public SimulationView(Simulation simulation, SimulationEngineConfig config, boolean includeControlPanel, SimulationView.ControlPanelFactory factory, Object... keyVals) Construct a simulation view with a caller-provided control panel factory.- Parameters:
simulation- the simulation to run (non-null)config- engine configuration (non-null)includeControlPanel- if true, creates and adds a control panel at SOUTHfactory- factory used to create the control panel componentkeyVals- standardBaseViewkey-value arguments
-
SimulationView
public SimulationView(Simulation simulation, SimulationEngineConfig config, boolean includeControlPanel, SimulationView.ControlPanelFactory controlPanelFactory, boolean includeDiagnostics, SimulationView.DiagnosticFactory diagnosticFactory, double initialSplitFraction, Object... keyVals) Construct a simulation view with optional control panel and optional diagnostics panel.- Parameters:
simulation- the simulation to run (non-null)config- engine configuration (non-null)includeControlPanel- if true, creates and adds a control panel at SOUTHcontrolPanelFactory- factory used to create the control panel component (may be null if includeControlPanel is false)includeDiagnostics- if true, installs a right-side diagnostics component via a split panediagnosticFactory- factory used to create the diagnostics component (required if includeDiagnostics is true)initialSplitFraction- fraction of width given to the main (left) component on startup (0..1)keyVals- standardBaseViewkey-value arguments
-
-
Method Details
-
getDiagnosticsComponent
Get the diagnostics component, if any.- Returns:
- the diagnostics component, or null if none
-
getSimulationEngine
Description copied from interface:ISimulationHostReturn theSimulationEnginehosted by this object.- Specified by:
getSimulationEnginein interfaceISimulationHost- Returns:
- the simulation engine (never null)
-
onStateChange
public void onStateChange(SimulationContext ctx, SimulationState from, SimulationState to, String reason) Description copied from interface:SimulationListenerCalled on every state transition.- Specified by:
onStateChangein interfaceSimulationListener- Parameters:
ctx- simulation contextfrom- previous stateto- new statereason- human-readable reason (may be null)
-
onInit
Description copied from interface:SimulationListenerCalled after the engine transitions toSimulationState.INITIALIZING.- Specified by:
onInitin interfaceSimulationListener- Parameters:
ctx- simulation context
-
onReady
Description copied from interface:SimulationListenerCalled when initialization completes and the engine reachesSimulationState.READY.- Specified by:
onReadyin interfaceSimulationListener- Parameters:
ctx- simulation context
-
onRun
Description copied from interface:SimulationListenerCalled when the engine begins execution (entersSimulationState.RUNNING).- Specified by:
onRunin interfaceSimulationListener- Parameters:
ctx- simulation context
-
onResume
Description copied from interface:SimulationListenerCalled when the engine resumes fromSimulationState.PAUSEDback toSimulationState.RUNNING.- Specified by:
onResumein interfaceSimulationListener- Parameters:
ctx- simulation context
-
onPause
Description copied from interface:SimulationListenerCalled when the engine entersSimulationState.PAUSED.- Specified by:
onPausein interfaceSimulationListener- Parameters:
ctx- simulation context
-
onDone
Description copied from interface:SimulationListenerCalled when the engine ends normally (reachesSimulationState.TERMINATED).- Specified by:
onDonein interfaceSimulationListener- Parameters:
ctx- simulation context
-
onFail
Description copied from interface:SimulationListenerCalled when the engine fails (reachesSimulationState.FAILED).- Specified by:
onFailin interfaceSimulationListener- Parameters:
ctx- simulation contexterror- the exception/error that caused failure
-
onCancelRequested
Description copied from interface:SimulationListenerCalled when cancellation is requested viaSimulationEngine.requestCancel().This callback occurs on the EDT; the simulation thread observes cancellation via
SimulationContext.isCancelRequested().- Specified by:
onCancelRequestedin interfaceSimulationListener- Parameters:
ctx- simulation context
-
onMessage
Description copied from interface:SimulationListenerCalled for status/log messages intended for UI display.- Specified by:
onMessagein interfaceSimulationListener- Parameters:
ctx- simulation contextmessage- message text (non-null)
-
onProgress
Description copied from interface:SimulationListenerCalled for progress updates (indeterminate or determinate).- Specified by:
onProgressin interfaceSimulationListener- Parameters:
ctx- simulation contextprogress- progress payload
-
onRefresh
Default refresh behavior for MDI: repaint the container component.- Specified by:
onRefreshin interfaceSimulationListener- Parameters:
ctx- simulation context
-
onSimulationStateChange
protected void onSimulationStateChange(SimulationContext ctx, SimulationState from, SimulationState to, String reason) Called on the EDT after any engine state transition.- Parameters:
ctx- simulation contextfrom- previous stateto- new statereason- human-readable transition reason
-
onSimulationInit
Called on the EDT after simulation initialization begins. -
onSimulationReady
Called on the EDT when the initialized simulation becomes ready. -
onSimulationRun
Called on the EDT when the simulation first starts running. -
onSimulationResume
Called on the EDT when a paused simulation resumes. -
onSimulationPause
Called on the EDT when the simulation pauses. -
onSimulationDone
Called on the EDT after normal termination. -
onSimulationFail
Called on the EDT after simulation failure. -
onSimulationCancelRequested
Called on the EDT after the first cancellation request. -
onSimulationMessage
Called on the EDT when the simulation posts a status message. -
onSimulationProgress
Called on the EDT when the simulation posts progress. -
onSimulationRefresh
Called on the EDT before the view repaints in response to a refresh. -
replaceEngine
Replace the hosted engine and rebind the control panel on the EDT.- Parameters:
newEngine- replacement engine
-
requestEngineReset
protected final void requestEngineReset(Supplier<Simulation> simSupplier, Consumer<SimulationEngine> afterSwap, boolean autoStart, boolean refresh) Replace the engine immediately when safe, or stop the current run and replace it after termination.- Parameters:
simSupplier- creates the replacement simulationafterSwap- optional engine-configuration callbackautoStart- whether to start the replacement enginerefresh- whether to request an initial refresh
-
startAndRun
public final void startAndRun()Start the engine and immediately request that it run, on the EDT.
-