sim.util.media.chart
Class ChartGenerator

java.lang.Object
  extended by java.awt.Component
      extended by java.awt.Container
          extended by javax.swing.JComponent
              extended by javax.swing.JPanel
                  extended by sim.util.media.chart.ChartGenerator
All Implemented Interfaces:
java.awt.image.ImageObserver, java.awt.MenuContainer, java.io.Serializable, javax.accessibility.Accessible
Direct Known Subclasses:
HistogramGenerator, ScatterPlotGenerator, TimeSeriesChartGenerator

public abstract class ChartGenerator
extends javax.swing.JPanel

ChartGenerator is a JPanel which displays a chart using the JFreeChart library. The class is abstract: you'll need to use a concrete subclass to build a specific kind of chart. The facility allows multiple time series to be displayed at one time, to be exported to PDF, and to be dynamically added and removed.

Subclasses only really need to override one method: buildChart(), which creates the chart and the chartPanel and loads them into the chartHolder, then finally sets the series dataset. Subclasses will also find it convenient to override update() to update the chart specially each time it's repainted, removeSeries(index) to remove a series, or moveSeries(index, boolean) to change the order of series. In a subclass's constructor it may also modify the global attributes to make ones special to its kind of chart as well. Finally, note that ChartGenerator has no standard API for adding a series to the chart, nor any standard way to modify this series once it has been added. This is because JFreeChart has non-standard, non-consistent APIs for different kinds of charts. You will need to implement these on a per-chart basis as you see fit.

ChartGenerator displays three regions:

See Also:
Serialized Form

Nested Class Summary
 
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
protected  JFreeChart chart
          The chart
protected  javax.swing.JScrollPane chartHolder
          The JScrollPane which holdw the ChartPanel
protected  ChartPanel chartPanel
          The panel which holds and draws the chart
static long FORCE_KEY
           
protected  javax.swing.Box globalAttributes
          A holder for global attributes components
protected  javax.swing.Box seriesAttributes
          A holder for series attributes components
 
Fields inherited from class javax.swing.JComponent
accessibleContext, 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
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
ChartGenerator()
          Generates a new ChartGenerator with a blank chart.
 
Method Summary
 void addGlobalAttribute(java.awt.Component component)
          Adds a global attribute panel to the frame
 void addLegend()
          Add a legend to the chart unless the chart already has one.
protected abstract  void buildChart()
          Override this to construct the appropriate kind of chart.
 javax.swing.JFrame createFrame()
          Returns a JFrame suitable or housing the ChartGenerator.
 javax.swing.JFrame createFrame(java.lang.Object simulation)
           
 JFreeChart getChart()
          Returns the underlying chart.
 ChartPanel getChartPanel()
          Returns the ChartPanel holding the chart.
 java.lang.String getDomainAxisLabel()
          Deprecated. Returns the name of the Domain Axis label -- usually this is the X axis.
 javax.swing.JFrame getFrame()
          Returns the JFrame which stores the whole chart.
 java.awt.Component getGlobalAttribute(int index)
          Returns the global attribute panel of the given index.
 int getGlobalAttributeCount()
          Deprecated. Use getNumGlobalAttributes
 int getNumGlobalAttributes()
          Returns the number of global attribute panels.
 int getNumSeriesAttributes()
           
 java.lang.String getRangeAxisLabel()
          Deprecated. Returns the name of the Range Axis Label -- usually this is the Y axis.
protected  SeriesAttributes getSeriesAttribute(int i)
           
protected  SeriesAttributes[] getSeriesAttributes()
           
 XYDataset getSeriesDataset()
           
 java.lang.String getTitle()
          Returns the title of the chart
 java.lang.String getXAxisLabel()
          Returns the name of the X Axis label.
 java.lang.String getYAxisLabel()
          Returns the name of the Y Axis label.
 boolean isXAxisLogScaled()
           
 boolean isYAxisLogScaled()
           
 void moveSeries(int index, boolean up)
          Override this to move a series relative to other series.
 void quit()
          Prepares the chart to be garbage collected.
 void removeAllSeries()
          Deletes all series from the chart.
 java.awt.Component removeGlobalAttribute(int index)
          Remooves the global attribute at the given index and returns it.
 void removeSeries(int index)
          Override this to remove a series from the chart.
 void setDomainAxisLabel(java.lang.String val)
          Deprecated. Sets the name of the Domain Axis label -- usually this is the X axis.
 void setDomainAxisRange(double lower, double upper)
          Deprecated.  
 void setRangeAxisLabel(java.lang.String val)
          Deprecated. Sets the name of the Range Axis label -- usually this is the Y axis.
 void setRangeAxisRange(double lower, double upper)
          Deprecated.  
protected  void setSeriesAttributes(SeriesAttributes[] c)
           
 void setSeriesDataset(XYDataset obj)
           
 void setTitle(java.lang.String title)
          Sets the title of the chart (and the window frame).
 void setXAxisLabel(java.lang.String val)
          Sets the name of the X Axis label.
 void setXAxisLogScaled(boolean isLogScaled)
           
 void setXAxisRange(double lower, double upper)
           
 void setYAxisLabel(java.lang.String val)
          Sets the name of the Y Axis label.
 void setYAxisLogScaled(boolean isLogScaled)
           
 void setYAxisRange(double lower, double upper)
           
 void startMovie()
          Starts a Quicktime movie on the given ChartGenerator.
 void stopMovie()
          Stops a Quicktime movie and cleans up, flushing the remaining frames out to disk.
protected  void update()
          Override this to update the chart to reflect new data.
 void update(long key, boolean newData)
          Key must be 0 or higher.
 void updateChartLater(long key)
          Posts a request to update the chart on the Swing event queue to happen next time repaints etc.
 void updateChartWithin(long key, long milliseconds)
          Updates the inspector asynchronously sometime before the given milliseconds have transpired.
 
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, isDoubleBuffered, isLightweightComponent, isManagingFocus, isOpaque, isOptimizedDrawingEnabled, isPaintingForPrint, 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, transferFocusBackward, 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, getPeer, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getToolkit, getTreeLock, gotFocus, handleEvent, hasFocus, hide, 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, transferFocusUpCycle
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

globalAttributes

protected javax.swing.Box globalAttributes
A holder for global attributes components


seriesAttributes

protected javax.swing.Box seriesAttributes
A holder for series attributes components


chart

protected JFreeChart chart
The chart


chartPanel

protected ChartPanel chartPanel
The panel which holds and draws the chart


chartHolder

protected javax.swing.JScrollPane chartHolder
The JScrollPane which holdw the ChartPanel


FORCE_KEY

public static final long FORCE_KEY
See Also:
Constant Field Values
Constructor Detail

ChartGenerator

public ChartGenerator()
Generates a new ChartGenerator with a blank chart. Before anything else, buildChart() is called.

Method Detail

getFrame

public javax.swing.JFrame getFrame()
Returns the JFrame which stores the whole chart. Set in createFrame(), else null.


setXAxisLogScaled

public void setXAxisLogScaled(boolean isLogScaled)

isXAxisLogScaled

public boolean isXAxisLogScaled()

setYAxisLogScaled

public void setYAxisLogScaled(boolean isLogScaled)

isYAxisLogScaled

public boolean isYAxisLogScaled()

getSeriesDataset

public XYDataset getSeriesDataset()

setSeriesDataset

public void setSeriesDataset(XYDataset obj)

update

public void update(long key,
                   boolean newData)
Key must be 0 or higher. Will update only if the key passed in is different from the previously passed in key or if the key is FORCE_KEY. If newData is true, then the chart will also be written out to a movie if appropriate.


update

protected void update()
Override this to update the chart to reflect new data.


getSeriesAttribute

protected SeriesAttributes getSeriesAttribute(int i)

getNumSeriesAttributes

public int getNumSeriesAttributes()

getSeriesAttributes

protected SeriesAttributes[] getSeriesAttributes()

setSeriesAttributes

protected void setSeriesAttributes(SeriesAttributes[] c)

removeSeries

public void removeSeries(int index)
Override this to remove a series from the chart. Be sure to call super(...) first.


moveSeries

public void moveSeries(int index,
                       boolean up)
Override this to move a series relative to other series. Be sure to call super(...) first.


buildChart

protected abstract void buildChart()
Override this to construct the appropriate kind of chart. This is the first thing called from the constructor; so certain of your instance variables may not have been set yet and you may need to set them yourself. You'll need to set the dataset.


startMovie

public void startMovie()
Starts a Quicktime movie on the given ChartGenerator. The size of the movie frame will be the size of the chart at the time this method is called. This method ought to be called from the main event loop. Most of the default movie formats provided will result in a gigantic movie, which you can re-encode using something smarter (like the Animation or Sorenson codecs) to put to a reasonable size. On the Mac, Quicktime Pro will do this quite elegantly.


stopMovie

public void stopMovie()
Stops a Quicktime movie and cleans up, flushing the remaining frames out to disk. This method ought to be called from the main event loop.


removeAllSeries

public void removeAllSeries()
Deletes all series from the chart.


quit

public void quit()
Prepares the chart to be garbage collected. If you override this, be sure to call super.quit()


getChartPanel

public ChartPanel getChartPanel()
Returns the ChartPanel holding the chart.


addGlobalAttribute

public void addGlobalAttribute(java.awt.Component component)
Adds a global attribute panel to the frame


getGlobalAttribute

public java.awt.Component getGlobalAttribute(int index)
Returns the global attribute panel of the given index.


getGlobalAttributeCount

public int getGlobalAttributeCount()
Deprecated. Use getNumGlobalAttributes


getNumGlobalAttributes

public int getNumGlobalAttributes()
Returns the number of global attribute panels.


removeGlobalAttribute

public java.awt.Component removeGlobalAttribute(int index)
Remooves the global attribute at the given index and returns it.


setTitle

public void setTitle(java.lang.String title)
Sets the title of the chart (and the window frame).


getTitle

public java.lang.String getTitle()
Returns the title of the chart


setRangeAxisLabel

public void setRangeAxisLabel(java.lang.String val)
Deprecated. Sets the name of the Range Axis label -- usually this is the Y axis.


setYAxisLabel

public void setYAxisLabel(java.lang.String val)
Sets the name of the Y Axis label.


getRangeAxisLabel

public java.lang.String getRangeAxisLabel()
Deprecated. Returns the name of the Range Axis Label -- usually this is the Y axis.


getYAxisLabel

public java.lang.String getYAxisLabel()
Returns the name of the Y Axis label.


setDomainAxisLabel

public void setDomainAxisLabel(java.lang.String val)
Deprecated. Sets the name of the Domain Axis label -- usually this is the X axis.


setXAxisLabel

public void setXAxisLabel(java.lang.String val)
Sets the name of the X Axis label.


getDomainAxisLabel

public java.lang.String getDomainAxisLabel()
Deprecated. Returns the name of the Domain Axis label -- usually this is the X axis.


getXAxisLabel

public java.lang.String getXAxisLabel()
Returns the name of the X Axis label.


getChart

public JFreeChart getChart()
Returns the underlying chart.


createFrame

public javax.swing.JFrame createFrame()
Returns a JFrame suitable or housing the ChartGenerator. This frame largely calls chart.quit() when the JFrame is being closed.


createFrame

public javax.swing.JFrame createFrame(java.lang.Object simulation)

addLegend

public void addLegend()
Add a legend to the chart unless the chart already has one.


setRangeAxisRange

public void setRangeAxisRange(double lower,
                              double upper)
Deprecated. 


setYAxisRange

public void setYAxisRange(double lower,
                          double upper)

setDomainAxisRange

public void setDomainAxisRange(double lower,
                               double upper)
Deprecated. 


setXAxisRange

public void setXAxisRange(double lower,
                          double upper)

updateChartWithin

public void updateChartWithin(long key,
                              long milliseconds)
Updates the inspector asynchronously sometime before the given milliseconds have transpired. Once requested, further calls to request an update via this method will be ignored until the update occurs.


updateChartLater

public void updateChartLater(long key)
Posts a request to update the chart on the Swing event queue to happen next time repaints etc. happen.