Class OTSAnimationPanel

  • All Implemented Interfaces:
    java.awt.event.ActionListener, java.awt.event.WindowListener, java.awt.image.ImageObserver, java.awt.MenuContainer, java.io.Serializable, java.util.EventListener, javax.accessibility.Accessible, EventListenerInterface

    public class OTSAnimationPanel
    extends OTSSimulationPanel
    implements java.awt.event.ActionListener, java.awt.event.WindowListener, EventListenerInterface
    Animation panel with various controls.

    Copyright (c) 2013-2020 Delft University of Technology, PO Box 5, 2600 AA, Delft, the Netherlands. All rights reserved.
    BSD-style license. See OpenTrafficSim License.

    $LastChangedDate: 2018-10-16 12:57:02 +0200 (Tue, 16 Oct 2018) $, @version $Revision: 4703 $, by $Author: wjschakel $, initial version Jun 18, 2015

    Author:
    Alexander Verbraeck, Peter Knoppers
    See Also:
    Serialized Form
    • Nested Class Summary

      Nested Classes 
      Modifier and Type Class Description
      static class  OTSAnimationPanel.DemoPanelPosition
      Enum for demo panel position.
      protected class  OTSAnimationPanel.DisposeOnCloseThread
      Install the dispose on close when the OTSControlPanel is registered as part of a frame.
      protected class  OTSAnimationPanel.UpdateTimer
      UpdateTimer class to update the coordinate on the screen.
      • 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

      Fields 
      Modifier and Type Field Description
      protected boolean closeHandlerRegistered
      Has the window close handler been registered?
      protected boolean windowExited
      Indicate the window has been closed and the timer thread can stop.
      • Fields inherited from class javax.swing.JComponent

        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

        accessibleContext, 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
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void actionPerformed​(java.awt.event.ActionEvent actionEvent)
      void addAllToggleGISButtonText​(java.lang.String header, GisRenderable2D gisMap, java.lang.String toolTipText)
      Add buttons for toggling all GIS layers on or off.
      void addToggleAnimationButtonIcon​(java.lang.String name, java.lang.Class<? extends Locatable> locatableClass, java.lang.String iconPath, java.lang.String toolTipText, boolean initiallyVisible, boolean idButton)
      Add a button for toggling an animatable class on or off.
      void addToggleAnimationButtonText​(java.lang.String name, java.lang.Class<? extends Locatable> locatableClass, java.lang.String toolTipText, boolean initiallyVisible)
      Add a button for toggling an animatable class on or off.
      void addToggleGISButtonText​(java.lang.String layerName, java.lang.String displayName, GisRenderable2D gisMap, java.lang.String toolTipText)
      Add a button to toggle a GIS Layer on or off.
      void addToggleText​(java.lang.String text)
      Add a text to explain animatable classes.
      void createDemoPanel​(OTSAnimationPanel.DemoPanelPosition position)
      Creates a demo panel within the animation area.
      AnimationPanel getAnimationPanel()
      Easy access to the AnimationPanel.
      ColorControlPanel getColorControlPanel()
      Access the ColorControlPanel of this ControlPanel.
      javax.swing.JPanel getDemoPanel()
      Return a panel for on-screen demo controls.
      GTUColorer getGTUColorer()
      Access the GTUColorer of this animation ControlPanel.
      void hideGISLayer​(java.lang.String layerName)
      Set a GIS layer to be hidden in the animation to true.
      void installWindowCloseHandler()
      Install a handler for the window closed event that stops the simulator (if it is running).
      void notify​(EventInterface event)
      void setAutoPan​(java.lang.String newAutoPanId, org.opentrafficsim.swing.gui.OTSSearchPanel.ObjectKind<?> newAutoPanKind, boolean newAutoPanTrack)
      Change auto pan target.
      void showGISLayer​(java.lang.String layerName)
      Set a GIS layer to be shown in the animation to true.
      void toggleGISLayer​(java.lang.String layerName)
      Toggle a GIS layer to be displayed in the animation to its reverse value.
      void updateAnimationClassCheckBox​(java.lang.Class<? extends Locatable> locatableClass)
      Update the checkmark related to a programmatically changed animation state.
      protected void updateWorldCoordinate()
      Display the latest world coordinate based on the mouse position on the screen.
      void windowActivated​(java.awt.event.WindowEvent e)
      void windowClosed​(java.awt.event.WindowEvent e)
      void windowClosing​(java.awt.event.WindowEvent e)
      void windowDeactivated​(java.awt.event.WindowEvent e)
      void windowDeiconified​(java.awt.event.WindowEvent e)
      void windowIconified​(java.awt.event.WindowEvent e)
      void windowOpened​(java.awt.event.WindowEvent e)
      • 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, hide, isDoubleBuffered, isLightweightComponent, isManagingFocus, isOpaque, isOptimizedDrawingEnabled, isPaintingForPrint, isPaintingOrigin, 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, 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, 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, setCursor, setDropTarget, setFocusable, setFocusTraversalKeysEnabled, setIgnoreRepaint, setLocale, setLocation, setLocation, setMixingCutoutShape, setName, setSize, setSize, show, show, size, transferFocus, transferFocusBackward, transferFocusUpCycle
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
    • Field Detail

      • closeHandlerRegistered

        protected boolean closeHandlerRegistered
        Has the window close handler been registered?
      • windowExited

        protected boolean windowExited
        Indicate the window has been closed and the timer thread can stop.
    • Constructor Detail

      • OTSAnimationPanel

        public OTSAnimationPanel​(java.awt.geom.Rectangle2D extent,
                                 java.awt.Dimension size,
                                 OTSAnimator simulator,
                                 OTSModelInterface otsModel,
                                 GTUColorer gtuColorer,
                                 OTSNetwork network)
                          throws java.rmi.RemoteException,
                                 DSOLException
        Construct a panel that looks like the DSOLPanel for quick building of OTS applications.
        Parameters:
        extent - Rectangle2D; bottom left corner, length and width of the area (world) to animate.
        size - Dimension; the size to be used for the animation.
        simulator - OTSAnimator; the simulator or animator of the model.
        otsModel - OTSModelInterface; the builder and rebuilder of the simulation, based on properties.
        gtuColorer - GTUColorer; the colorer to use for the GTUs.
        network - OTSNetwork; network
        Throws:
        java.rmi.RemoteException - when notification of the animation panel fails
        DSOLException - when simulator does not implement AnimatorInterface
    • Method Detail

      • setAutoPan

        public void setAutoPan​(java.lang.String newAutoPanId,
                               org.opentrafficsim.swing.gui.OTSSearchPanel.ObjectKind<?> newAutoPanKind,
                               boolean newAutoPanTrack)
        Change auto pan target.
        Parameters:
        newAutoPanId - String; id of object to track (or
        newAutoPanKind - String; kind of object to track
        newAutoPanTrack - boolean; if true; tracking is continuously; if false; tracking is once
      • addToggleAnimationButtonIcon

        public final void addToggleAnimationButtonIcon​(java.lang.String name,
                                                       java.lang.Class<? extends Locatable> locatableClass,
                                                       java.lang.String iconPath,
                                                       java.lang.String toolTipText,
                                                       boolean initiallyVisible,
                                                       boolean idButton)
        Add a button for toggling an animatable class on or off. Button icons for which 'idButton' is true will be placed to the right of the previous button, which should be the corresponding button without the id. An example is an icon for showing/hiding the class 'Lane' followed by the button to show/hide the Lane ids.
        Parameters:
        name - String; the name of the button
        locatableClass - Class<? extends Locatable>; the class for which the button holds (e.g., GTU.class)
        iconPath - String; the path to the 24x24 icon to display
        toolTipText - String; the tool tip text to show when hovering over the button
        initiallyVisible - boolean; whether the class is initially shown or not
        idButton - boolean; id button that needs to be placed next to the previous button
      • addToggleAnimationButtonText

        public final void addToggleAnimationButtonText​(java.lang.String name,
                                                       java.lang.Class<? extends Locatable> locatableClass,
                                                       java.lang.String toolTipText,
                                                       boolean initiallyVisible)
        Add a button for toggling an animatable class on or off.
        Parameters:
        name - String; the name of the button
        locatableClass - Class<? extends Locatable>; the class for which the button holds (e.g., GTU.class)
        toolTipText - String; the tool tip text to show when hovering over the button
        initiallyVisible - boolean; whether the class is initially shown or not
      • addToggleText

        public final void addToggleText​(java.lang.String text)
        Add a text to explain animatable classes.
        Parameters:
        text - String; the text to show
      • addAllToggleGISButtonText

        public final void addAllToggleGISButtonText​(java.lang.String header,
                                                    GisRenderable2D gisMap,
                                                    java.lang.String toolTipText)
        Add buttons for toggling all GIS layers on or off.
        Parameters:
        header - String; the name of the group of layers
        gisMap - GisRenderable2D; the GIS map for which the toggles have to be added
        toolTipText - String; the tool tip text to show when hovering over the button
      • addToggleGISButtonText

        public final void addToggleGISButtonText​(java.lang.String layerName,
                                                 java.lang.String displayName,
                                                 GisRenderable2D gisMap,
                                                 java.lang.String toolTipText)
        Add a button to toggle a GIS Layer on or off.
        Parameters:
        layerName - String; the name of the layer
        displayName - String; the name to display next to the tick box
        gisMap - GisRenderable2D; the map
        toolTipText - String; the tool tip text
      • showGISLayer

        public final void showGISLayer​(java.lang.String layerName)
        Set a GIS layer to be shown in the animation to true.
        Parameters:
        layerName - String; the name of the GIS-layer that has to be shown.
      • hideGISLayer

        public final void hideGISLayer​(java.lang.String layerName)
        Set a GIS layer to be hidden in the animation to true.
        Parameters:
        layerName - String; the name of the GIS-layer that has to be hidden.
      • toggleGISLayer

        public final void toggleGISLayer​(java.lang.String layerName)
        Toggle a GIS layer to be displayed in the animation to its reverse value.
        Parameters:
        layerName - String; the name of the GIS-layer that has to be turned off or vice versa.
      • actionPerformed

        public final void actionPerformed​(java.awt.event.ActionEvent actionEvent)
        Specified by:
        actionPerformed in interface java.awt.event.ActionListener
      • getAnimationPanel

        public final AnimationPanel getAnimationPanel()
        Easy access to the AnimationPanel.
        Returns:
        AnimationPanel
      • createDemoPanel

        public void createDemoPanel​(OTSAnimationPanel.DemoPanelPosition position)
        Creates a demo panel within the animation area.
        Parameters:
        position - String; any string from BorderLayout indicating the position of the demo panel, except CENTER.
        Throws:
        java.lang.IllegalStateException - if the panel was already created
      • getDemoPanel

        public javax.swing.JPanel getDemoPanel()
        Return a panel for on-screen demo controls. The panel is create on first call.
        Returns:
        JPanel; panel
      • updateAnimationClassCheckBox

        public final void updateAnimationClassCheckBox​(java.lang.Class<? extends Locatable> locatableClass)
        Update the checkmark related to a programmatically changed animation state.
        Parameters:
        locatableClass - Class<? extends Locatable>; class to show the checkmark for
      • updateWorldCoordinate

        protected final void updateWorldCoordinate()
        Display the latest world coordinate based on the mouse position on the screen.
      • getGTUColorer

        public final GTUColorer getGTUColorer()
        Access the GTUColorer of this animation ControlPanel.
        Returns:
        GTUColorer the colorer used. If it is a SwitchableGTUColorer, the wrapper with the list will be returned, not the actual colorer in use.
      • getColorControlPanel

        public final ColorControlPanel getColorControlPanel()
        Access the ColorControlPanel of this ControlPanel. If the simulator is not a SimpleAnimator, no ColorControlPanel was constructed and this method will return null.
        Returns:
        ColorControlPanel
      • installWindowCloseHandler

        public final void installWindowCloseHandler()
        Install a handler for the window closed event that stops the simulator (if it is running).
      • windowOpened

        public void windowOpened​(java.awt.event.WindowEvent e)
        Specified by:
        windowOpened in interface java.awt.event.WindowListener
      • windowClosing

        public final void windowClosing​(java.awt.event.WindowEvent e)
        Specified by:
        windowClosing in interface java.awt.event.WindowListener
      • windowClosed

        public final void windowClosed​(java.awt.event.WindowEvent e)
        Specified by:
        windowClosed in interface java.awt.event.WindowListener
      • windowIconified

        public final void windowIconified​(java.awt.event.WindowEvent e)
        Specified by:
        windowIconified in interface java.awt.event.WindowListener
      • windowDeiconified

        public final void windowDeiconified​(java.awt.event.WindowEvent e)
        Specified by:
        windowDeiconified in interface java.awt.event.WindowListener
      • windowActivated

        public final void windowActivated​(java.awt.event.WindowEvent e)
        Specified by:
        windowActivated in interface java.awt.event.WindowListener
      • windowDeactivated

        public final void windowDeactivated​(java.awt.event.WindowEvent e)
        Specified by:
        windowDeactivated in interface java.awt.event.WindowListener