Class PlotDisplay<P,​A>

  • All Implemented Interfaces:
    java.awt.image.ImageObserver, java.awt.MenuContainer, java.io.Serializable

    public class PlotDisplay<P,​A>
    extends javax.swing.JComponent
    Graphical component which displays a gang of one or more plots. The plots are in general 'live', and may repaint themselves differently over the lifetime of the component according to user navigation actions, window size, and underlying data, depending on configuration.

    This class can be used as-is, or as a template.

    Since:
    1 Mar 2013
    Author:
    Mark Taylor
    See Also:
    Serialized Form
    • Nested Class Summary

      • 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
      static java.lang.String ASPECTS_PROPERTY
      Name of property that changes when plot Aspects are reset.
      • 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 Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void addPointSelectionListener​(PointSelectionListener psl)
      Adds a listener which will be notified when the user clicks on the plot region to select a point.
      void clearPlot()
      Clears the current cached plot image, if any, so that regeneration of the image from the data is forced when the next paint operation is performed; otherwise it may be copied from a cached image.
      static <P,​A>
      PlotDisplay<P,​A>
      createGangDisplay​(Ganger<P,​A> ganger, SurfaceFactory<P,​A> surfFact, int nz, ZoneContent[] contents, P[] profiles, ConfigMap[] aspectConfigs, ShadeAxisFactory[] shadeFacts, Range[] shadeFixRanges, Navigator<A> navigator, PaperTypeSelector ptSel, Compositor compositor, DataStore dataStore, PlotCaching caching)
      Utility method to construct a ganged PlotDisplay, with aspect obtained from a supplied config map.
      static <P,​A>
      PlotDisplay
      createPlotDisplay​(PlotLayer[] layers, SurfaceFactory<P,​A> surfFact, ConfigMap config, javax.swing.Icon legend, float[] legPos, java.lang.String title, ShadeAxisFactory shadeFact, Range shadeFixRange, PaperTypeSelector ptSel, Compositor compositor, Padding padding, DataStore dataStore, boolean navigable, PlotCaching caching)
      Utility method to construct a single-zoned PlotDisplay, with profile, aspect and navigator obtained from a supplied config map.
      A[] getAspects()
      Returns the most recently set aspects.
      static java.util.Map<AuxScale,​Range> getAuxRanges​(PlotLayer[] layers, Surface surface, Range shadeFixRange, ShadeAxisFactory shadeFact, java.lang.Object[] plans, DataStore dataStore)
      Gathers requested ranging information from data.
      Surface[] getSurfaces()
      Returns the current plot surfaces.
      void invalidate()  
      protected void paintComponent​(java.awt.Graphics g)  
      void removePointSelectionListener​(PointSelectionListener psl)
      Removes a previously added point selection listener.
      void setAspects​(A[] aspects)
      Sets the aspects of the plot zones.
      • 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, getUI, getUIClassID, getVerifyInputWhenFocusTarget, getVetoableChangeListeners, getVisibleRect, getWidth, getX, getY, grabFocus, hide, isDoubleBuffered, isLightweightComponent, isManagingFocus, isOpaque, isOptimizedDrawingEnabled, isPaintingForPrint, isPaintingOrigin, isPaintingTile, isRequestFocusEnabled, isValidateRoot, paint, paintBorder, paintChildren, paintImmediately, paintImmediately, paramString, 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, updateUI
      • 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, 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, getAccessibleContext, 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, toString, transferFocus, transferFocusBackward, transferFocusUpCycle
      • Methods inherited from class java.lang.Object

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

      • ASPECTS_PROPERTY

        public static final java.lang.String ASPECTS_PROPERTY
        Name of property that changes when plot Aspects are reset. Can be monitored by use of a PropertyChangeListener. The property object type is an array of aspects, that is of this class's parameterised type A[].
        See Also:
        Constant Field Values
    • Constructor Detail

      • PlotDisplay

        public PlotDisplay​(Ganger<P,​A> ganger,
                           SurfaceFactory<P,​A> surfFact,
                           int nz,
                           ZoneContent[] zoneContents,
                           P[] profiles,
                           A[] aspects,
                           ShadeAxisFactory[] shadeFacts,
                           Range[] shadeFixRanges,
                           Navigator<A> navigator,
                           PaperTypeSelector ptSel,
                           Compositor compositor,
                           DataStore dataStore,
                           PlotCaching caching)
        Constructs a PlotDisplay that shows multiple plot surfaces.
        Parameters:
        ganger - defines plot surface grouping
        surfFact - surface factory
        nz - number of plot zones in group
        zoneContents - plot content by zone (nz-element array)
        profiles - plot surface profiles by zone (nz-element array)
        aspects - plot surface aspects by zone (nz-element array)
        shadeFacts - shader axis factories by zone (nz-element array), elements may be null if not required
        shadeFixRanges - fixed shader ranges by zone (nz-element array) elements may be null for auto-range or if no shade axis
        navigator - user gesture navigation controller, or null for a non-interactive plot
        ptSel - paper type selector
        compositor - compositor for pixel composition
        dataStore - data storage object
        caching - plot caching policy
      • PlotDisplay

        public PlotDisplay​(SurfaceFactory<P,​A> surfFact,
                           PlotLayer[] layers,
                           P profile,
                           javax.swing.Icon legend,
                           float[] legPos,
                           java.lang.String title,
                           A aspect,
                           ShadeAxisFactory shadeFact,
                           Range shadeFixRange,
                           Navigator<A> navigator,
                           PaperTypeSelector ptSel,
                           Compositor compositor,
                           Padding padding,
                           DataStore dataStore,
                           PlotCaching caching)
        Constructs a PlotDisplay that shows a single plot surface.
        Parameters:
        surfFact - surface factory
        layers - plot layers to be painted
        profile - surface profile
        legend - legend icon if required, or null
        legPos - legend position if intenal legend is required; 2-element (x,y) array, each element in range 0-1
        title - title text, or null
        aspect - plot surface aspect
        shadeFact - shader axis factory, or null if not required
        shadeFixRange - fixed shader range, or null for auto-range
        navigator - user gesture navigation controller, or null for a non-interactive plot
        ptSel - paper type selector
        compositor - compositor for pixel composition
        padding - user requirements for external space
        dataStore - data storage object
        caching - plot caching policy
    • Method Detail

      • clearPlot

        public void clearPlot()
        Clears the current cached plot image, if any, so that regeneration of the image from the data is forced when the next paint operation is performed; otherwise it may be copied from a cached image. This method is called automatically by invalidate(), but may also be called manually, for instance if the data in the data store may have changed.
      • addPointSelectionListener

        public void addPointSelectionListener​(PointSelectionListener psl)
        Adds a listener which will be notified when the user clicks on the plot region to select a point.
        Parameters:
        psl - listener to add
      • removePointSelectionListener

        public void removePointSelectionListener​(PointSelectionListener psl)
        Removes a previously added point selection listener.
        Parameters:
        psl - listener to remove
      • invalidate

        public void invalidate()
        Overrides:
        invalidate in class java.awt.Container
      • paintComponent

        protected void paintComponent​(java.awt.Graphics g)
        Overrides:
        paintComponent in class javax.swing.JComponent
      • setAspects

        public void setAspects​(A[] aspects)
        Sets the aspects of the plot zones. This triggers a repaint if required. Note this method does not test or adjust the supplied aspects for consistency with the ganger.
        Parameters:
        aspects - per-zone array of required aspects
      • getAspects

        public A[] getAspects()
        Returns the most recently set aspects.
        Returns:
        per-zone array of current aspects
      • getSurfaces

        public Surface[] getSurfaces()
        Returns the current plot surfaces. They will have been generated by this display's SurfaceFactory. Elements may be null if they are not currently up to date (plot is in process of being repainted).
        Returns:
        per-zone surface array
      • createPlotDisplay

        @Slow
        public static <P,​A> PlotDisplay createPlotDisplay​(PlotLayer[] layers,
                                                                SurfaceFactory<P,​A> surfFact,
                                                                ConfigMap config,
                                                                javax.swing.Icon legend,
                                                                float[] legPos,
                                                                java.lang.String title,
                                                                ShadeAxisFactory shadeFact,
                                                                Range shadeFixRange,
                                                                PaperTypeSelector ptSel,
                                                                Compositor compositor,
                                                                Padding padding,
                                                                DataStore dataStore,
                                                                boolean navigable,
                                                                PlotCaching caching)
        Utility method to construct a single-zoned PlotDisplay, with profile, aspect and navigator obtained from a supplied config map. This will perform ranging from data if it is required; in that case, it may take time to execute.
        Parameters:
        layers - layers constituting plot content
        surfFact - surface factory
        config - map containing surface profile, initial aspect and navigator configuration
        legend - legend icon, or null if none required
        legPos - 2-element array giving x,y fractional legend placement position within plot (elements in range 0..1), or null for external legend
        title - plot title, or null
        shadeFact - makes shader axis, or null if not required
        shadeFixRange - fixed shader range, or null for auto-range where required
        ptSel - paper type selector
        compositor - compositor for pixel composition
        padding - user requirements for external space
        dataStore - data storage object
        navigable - true for an interactive plot
        caching - plot caching policy
        Returns:
        new plot component
      • createGangDisplay

        @Slow
        public static <P,​A> PlotDisplay<P,​A> createGangDisplay​(Ganger<P,​A> ganger,
                                                                           SurfaceFactory<P,​A> surfFact,
                                                                           int nz,
                                                                           ZoneContent[] contents,
                                                                           P[] profiles,
                                                                           ConfigMap[] aspectConfigs,
                                                                           ShadeAxisFactory[] shadeFacts,
                                                                           Range[] shadeFixRanges,
                                                                           Navigator<A> navigator,
                                                                           PaperTypeSelector ptSel,
                                                                           Compositor compositor,
                                                                           DataStore dataStore,
                                                                           PlotCaching caching)
        Utility method to construct a ganged PlotDisplay, with aspect obtained from a supplied config map. This will perform ranging from data if it is required; in that case, it may take time to execute.
        Parameters:
        ganger - definses plot grouping
        surfFact - surface factory
        nz - number of plot zones in group
        contents - per-zone content information (nz-element array)
        profiles - per-zone profiles (nz-element array)
        aspectConfigs - per-zone config map providing entries for surf.getAspectKeys (nz-element arrays)
        shadeFacts - shader axis factorys by zone (nz-element array), elements may be null if not required
        shadeFixRanges - fixed shader ranges by zone (nz-element array) elements may be null for auto-range or if no shade axis
        navigator - user gesture navigation controller, or null for a non-interactive plot
        ptSel - paper type selector
        compositor - compositor for pixel composition
        dataStore - data storage object
        caching - plot caching policy on every repaint
        Returns:
        new plot component
      • getAuxRanges

        @Slow
        public static java.util.Map<AuxScale,​Range> getAuxRanges​(PlotLayer[] layers,
                                                                       Surface surface,
                                                                       Range shadeFixRange,
                                                                       ShadeAxisFactory shadeFact,
                                                                       java.lang.Object[] plans,
                                                                       DataStore dataStore)
        Gathers requested ranging information from data.
        Parameters:
        layers - plot layers
        surface - plot surface
        shadeFixRange - fixed shade range limits, if any
        shadeFact - makes shader axis, or null
        plans - array of calculated plan objects, or null
        dataStore - data storage object
        Returns:
        ranging information