Documentation of 'info.monitorenter.gui.chart.views.ChartPanel' Java class
ChartPanel
info.monitorenter.gui.chart.views

Class ChartPanel

  • All Implemented Interfaces:
    java.awt.image.ImageObserver, java.awt.MenuContainer, java.beans.PropertyChangeListener, java.io.Serializable, java.util.EventListener, javax.accessibility.Accessible


    public class ChartPanel
    extends javax.swing.JLayeredPane
    implements java.beans.PropertyChangeListener
    A decoration for Chart2D that adds various controls for a Chart2D and it's ITrace2D instances in form of popup menues.

    Performance note

    The context menu items register themselves with the chart to adapt their basic UI properties (font, foreground color, background color) via weak referenced instances of LayoutFactory.BasicPropertyAdaptSupport . This ensures that dropping a complete menu tree from the UI makes them garbage collectable without introduction of highly unstable and unmaintainable active memory management code. A side effect is that these listeners remain in the property change listener list of the chart unless they are finalized.

    Adding and removing many traces to / from charts that are wrapped in ChartPanel without System.gc() followed by System.runFinalization() in your code will leave a huge amount of listeners for non-visible uncleaned menu items in the chart which causes a high cpu throttle for increasing the listener list.

    The reason seems to be the implementation of ( EventListenerList that is used by SwingPropertyChangeSupport). It is based upon an array an grows only for the space of an additional listener by using System.arraycopy(java.lang.Object, int, java.lang.Object, int, int) (ouch, this should be changed).

    Profiling a day with showed that up to 2000 dead listeners remained in the list. The cpu load increased after about 200 add / remove trace operations. Good news is that no memory leak could be detected.

    If those add and remove trace operations on ChartPanel - connected charts are performed with intermediate UI action property change events on dead listeners will let them remove themselves from the listener list thus avoiding the cpu overhead. So UI / user - controlled applications will unlikely suffer from this problem.

    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.Component

        java.awt.Component.BaselineResizeBehavior
    • Field Summary

      • Fields inherited from class javax.swing.JLayeredPane

        DEFAULT_LAYER, DRAG_LAYER, FRAME_CONTENT_LAYER, LAYER_PROPERTY, MODAL_LAYER, PALETTE_LAYER, POPUP_LAYER
      • Fields inherited from class javax.swing.JComponent

        TOOL_TIP_TEXT_KEY, 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

      Constructors 
      Constructor and Description
      ChartPanel(Chart2D chart)
      Creates an instance that decorates the given chart with controls in form of popup menus.
      ChartPanel(Chart2D chart, boolean adaptUI2Chart)
      Creates an instance that decorates the given chart with controls in form of popup menus.
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method and Description
      boolean equals(java.lang.Object obj) 
      IAnnotationCreator getAnnotationCreator()
      Returns the annotationCreator.
      Chart2D getChart()
      Returns the chart.
      int hashCode() 
      static void main(java.lang.String[] args)
      Main enbtry for demo app.
      void propertyChange(java.beans.PropertyChangeEvent evt)
      Listens for property "background" of the Chart2D instance that is contained in this component and sets the background color.
      void setAnnotationCreator(IAnnotationCreator annotationCreator)
      Sets the annotationCreator.
      • Methods inherited from class javax.swing.JLayeredPane

        getAccessibleContext, getComponentCountInLayer, getComponentsInLayer, getIndexOf, getLayer, getLayer, getLayeredPaneAbove, getPosition, highestLayer, isOptimizedDrawingEnabled, lowestLayer, moveToBack, moveToFront, paint, putLayer, remove, removeAll, setLayer, setLayer, setPosition
      • Methods inherited from class javax.swing.JComponent

        addAncestorListener, addNotify, addVetoableChangeListener, computeVisibleRect, contains, createToolTip, disable, enable, firePropertyChange, firePropertyChange, firePropertyChange, getActionForKeyStroke, getActionMap, getAlignmentX, getAlignmentY, getAncestorListeners, getAutoscrolls, getBaseline, getBaselineResizeBehavior, getBorder, getBounds, getClientProperty, 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, getUIClassID, getVerifyInputWhenFocusTarget, getVetoableChangeListeners, getVisibleRect, getWidth, getX, getY, grabFocus, hide, isDoubleBuffered, isLightweightComponent, isManagingFocus, isOpaque, isPaintingForPrint, isPaintingTile, isRequestFocusEnabled, isValidateRoot, paintImmediately, paintImmediately, print, printAll, putClientProperty, registerKeyboardAction, registerKeyboardAction, removeAncestorListener, removeNotify, removeVetoableChangeListener, repaint, repaint, requestDefaultFocus, requestFocus, requestFocus, 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, setVerifyInputWhenFocusTarget, setVisible, unregisterKeyboardAction, update, updateUI
      • Methods 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, isFocusCycleRoot, isFocusTraversalPolicyProvider, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paintComponents, preferredSize, printComponents, remove, removeContainerListener, setComponentZOrder, setFocusCycleRoot, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, setLayout, transferFocusDownCycle, validate
      • Methods inherited from class java.awt.Component

        action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, bounds, checkImage, checkImage, contains, createImage, createImage, createVolatileImage, createVolatileImage, dispatchEvent, enable, enableInputMethods, 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, 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, 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, transferFocusBackward, transferFocusUpCycle
      • Methods inherited from class java.lang.Object

        getClass, notify, notifyAll, wait, wait, wait
    • Constructor Detail

      • ChartPanel

        public ChartPanel(Chart2D chart)
        Creates an instance that decorates the given chart with controls in form of popup menus.

        Parameters:
        chart - A configured Chart2D instance that will be displayed and controlled by this panel.
      • ChartPanel

        public ChartPanel(Chart2D chart,
                          boolean adaptUI2Chart)
        Creates an instance that decorates the given chart with controls in form of popup menus.

        Parameters:
        chart - A configured Chart2D instance that will be displayed and controlled by this panel.
        adaptUI2Chart - if true the menu will adapt it's basic UI properties (font, foreground and background color) to the given chart.
    • Method Detail

      • main

        public static void main(java.lang.String[] args)
        Main enbtry for demo app.

        Parameters:
        args - ignored.
      • equals

        public boolean equals(java.lang.Object obj)
        Overrides:
        equals in class java.lang.Object
        See Also:
        Object.equals(java.lang.Object)
      • getAnnotationCreator

        public final IAnnotationCreator getAnnotationCreator()
        Returns the annotationCreator.

        Returns:
        the annotationCreator
      • getChart

        public final Chart2D getChart()
        Returns the chart.

        Returns:
        the chart
      • hashCode

        public int hashCode()
        Overrides:
        hashCode in class java.lang.Object
        See Also:
        Object.hashCode()
      • propertyChange

        public void propertyChange(java.beans.PropertyChangeEvent evt)
        Listens for property "background" of the Chart2D instance that is contained in this component and sets the background color.

        Specified by:
        propertyChange in interface java.beans.PropertyChangeListener
        See Also:
        PropertyChangeListener.propertyChange(java.beans.PropertyChangeEvent)
      • setAnnotationCreator

        public final void setAnnotationCreator(IAnnotationCreator annotationCreator)
        Sets the annotationCreator.

        Parameters:
        annotationCreator - the annotationCreator to set

DMelt 3.0 © DataMelt by jWork.ORG

You see the box below because you did not login.