public 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.
javax.swing.JLayeredPane.AccessibleJLayeredPane
javax.swing.JComponent.AccessibleJComponent
Modifier and Type | Field and Description |
---|---|
protected javax.swing.JPanel |
m_labelPanel
An internal panel for the labels of the traces that uses a
FlowLayout . |
DEFAULT_LAYER, DRAG_LAYER, FRAME_CONTENT_LAYER, LAYER_PROPERTY, MODAL_LAYER, PALETTE_LAYER, POPUP_LAYER
accessibleContext, listenerList, TOOL_TIP_TEXT_KEY, ui, UNDEFINED_CONDITION, WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, WHEN_FOCUSED, WHEN_IN_FOCUSED_WINDOW
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.
|
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.
|
addImpl, getAccessibleContext, getComponentCountInLayer, getComponentsInLayer, getComponentToLayer, getIndexOf, getLayer, getLayer, getLayeredPaneAbove, getObjectForLayer, getPosition, highestLayer, insertIndexForLayer, isOptimizedDrawingEnabled, lowestLayer, moveToBack, moveToFront, paint, paramString, putLayer, remove, removeAll, setLayer, setLayer, setPosition
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, 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, updateUI
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, processContainerEvent, processEvent, remove, removeContainerListener, setComponentZOrder, setFocusCycleRoot, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, setLayout, transferFocusDownCycle, validate, validateTree
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, 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, processComponentEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processMouseWheelEvent, 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
protected 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.Object
Object.equals(java.lang.Object)
public final IAnnotationCreator getAnnotationCreator()
public final Chart2D getChart()
public int hashCode()
hashCode
in class java.lang.Object
Object.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.PropertyChangeListener
PropertyChangeListener.propertyChange(java.beans.PropertyChangeEvent)
public final void setAnnotationCreator(IAnnotationCreator annotationCreator)
annotationCreator
- the annotationCreator to setCopyright © 2001 - 2010 LGPL, All Rights Footloose.