java.beans.PropertyChangeListener, java.util.EventListenerpublic class ChartPanel
extends javax.swing.JLayeredPane
implements java.beans.PropertyChangeListener
Chart2D that adds various controls for a
Chart2D and it's ITrace2D instances in form of popup menues.
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.
java.awt.Component.AccessibleAWTComponent, java.awt.Component.BaselineResizeBehavior, java.awt.Component.BltBufferStrategy, java.awt.Component.FlipBufferStrategyjava.awt.Container.AccessibleAWTContainer| Modifier and Type | Field | Description |
|---|---|---|
protected javax.swing.JPanel |
m_labelPanel |
An internal panel for the labels of the traces that uses a
FlowLayout. |
accessibleContext, BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENTABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH| Constructor | 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.
|
| Modifier and Type | Method | 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.
|
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, toString, transferFocus, transferFocusBackward, transferFocusUpCycleadd, 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, processContainerEvent, processEvent, remove, removeContainerListener, setComponentZOrder, setFocusCycleRoot, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, setLayout, transferFocusDownCycle, validate, validateTreeaddAncestorListener, 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, isPaintingForPrint, isPaintingOrigin, isPaintingTile, isRequestFocusEnabled, isValidateRoot, 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, updateUIaddImpl, getAccessibleContext, getComponentCountInLayer, getComponentsInLayer, getComponentToLayer, getIndexOf, getLayer, getLayer, getLayeredPaneAbove, getObjectForLayer, getPosition, highestLayer, insertIndexForLayer, isOptimizedDrawingEnabled, lowestLayer, moveToBack, moveToFront, paint, paramString, putLayer, remove, removeAll, setLayer, setLayer, setPositionprotected javax.swing.JPanel m_labelPanel
An internal panel for the labels of the traces that uses a
FlowLayout.
public ChartPanel(Chart2D chart)
chart - A configured Chart2D instance that will be displayed and
controlled by this panel.public ChartPanel(Chart2D chart, boolean adaptUI2Chart)
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.public static void main(java.lang.String[] args)
args - ignored.public boolean equals(java.lang.Object obj)
equals in class java.lang.ObjectObject.equals(java.lang.Object)public final IAnnotationCreator getAnnotationCreator()
public final Chart2D getChart()
public int hashCode()
hashCode in class java.lang.ObjectObject.hashCode()public void propertyChange(java.beans.PropertyChangeEvent evt)
Chart2D instance that
is contained in this component and sets the background color.
propertyChange in interface java.beans.PropertyChangeListenerPropertyChangeListener.propertyChange(java.beans.PropertyChangeEvent)public final void setAnnotationCreator(IAnnotationCreator annotationCreator)
annotationCreator - the annotationCreator to setCopyright © 2001 - 2010 LGPL, All Rights Footloose.