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:
PieChartGenerator, XYChartGenerator

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  sim.util.media.chart.ChartGenerator.ScrollableChartPanel chartPanel
          The panel which holds and draws the chart
 double DEFAULT_CHART_HEIGHT
           
 double DEFAULT_CHART_PROPORTION
           
static long FORCE_KEY
           
protected  javax.swing.Box globalAttributes
          A holder for global attributes components
protected  java.lang.String invalidChartTitle
          This is set to a string indicating that the chart is invalid.
protected  javax.swing.Box seriesAttributes
          A holder for series attributes components
protected  java.lang.String validChartTitle
           
 
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.
 sim.util.media.chart.ChartGenerator.ScrollableChartPanel buildChartPanel(JFreeChart chart)
           
protected  void buildGlobalAttributes(LabelledList list)
           
 javax.swing.JFrame createFrame()
          Returns a JFrame suitable or housing the ChartGenerator.
 javax.swing.JFrame createFrame(boolean inspector)
          Returns a JFrame suitable or housing the ChartGenerator.
 javax.swing.JFrame createFrame(java.lang.Object simulation)
          Deprecated. use createFrame()
 JFreeChart getChart()
          Returns the underlying chart.
 ChartPanel getChartPanel()
          Returns the ChartPanel holding the chart.
 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()
           
 double getProportion()
           
 double getScale()
           
protected  SeriesAttributes getSeriesAttribute(int i)
           
protected  SeriesAttributes[] getSeriesAttributes()
           
abstract  int getSeriesCount()
           
abstract  Dataset getSeriesDataset()
           
 java.lang.String getTitle()
          Returns the title of the chart
 boolean isFixed()
           
 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 setChartPanel(sim.util.media.chart.ChartGenerator.ScrollableChartPanel chartPanel)
           
 void setFixed(boolean value)
           
 void setInvalidChartTitle(java.lang.String title)
          Sets the invalid chart title if any.
 void setProportion(double val)
           
 void setScale(double val)
           
protected  void setSeriesAttributes(SeriesAttributes[] c)
           
abstract  void setSeriesDataset(Dataset obj)
           
 void setTitle(java.lang.String title)
          Sets the title of the chart (and the window frame).
 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()
           
 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 sim.util.media.chart.ChartGenerator.ScrollableChartPanel chartPanel
The panel which holds and draws the chart


FORCE_KEY

public static final long FORCE_KEY
See Also:
Constant Field Values

invalidChartTitle

protected java.lang.String invalidChartTitle
This is set to a string indicating that the chart is invalid. When the title is set in the chart, this title will be used instead.


validChartTitle

protected java.lang.String validChartTitle

DEFAULT_CHART_HEIGHT

public double DEFAULT_CHART_HEIGHT

DEFAULT_CHART_PROPORTION

public double DEFAULT_CHART_PROPORTION
Constructor Detail

ChartGenerator

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

Method Detail

setChartPanel

public void setChartPanel(sim.util.media.chart.ChartGenerator.ScrollableChartPanel chartPanel)

getFrame

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


getSeriesDataset

public abstract Dataset getSeriesDataset()

setSeriesDataset

public abstract void setSeriesDataset(Dataset obj)

update

protected void update()

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.


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.


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.


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.


getSeriesCount

public abstract int getSeriesCount()

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.


setInvalidChartTitle

public void setInvalidChartTitle(java.lang.String title)
Sets the invalid chart title if any. If null, clears the invalid chart title and displays the actual chart title.


setTitle

public void setTitle(java.lang.String title)
Sets the title of the chart (and the window frame). If there is an invalidChartTitle set, this is used instead and the specified title is held in storage to be used later.


getTitle

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


getChart

public JFreeChart getChart()
Returns the underlying chart.


buildGlobalAttributes

protected void buildGlobalAttributes(LabelledList list)

isFixed

public boolean isFixed()

setFixed

public void setFixed(boolean value)

getScale

public double getScale()

getProportion

public double getProportion()

setScale

public void setScale(double val)

setProportion

public void setProportion(double val)

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. By default the JFrame will HIDE itself (not DISPOSE itself) when closed.


createFrame

public javax.swing.JFrame createFrame(boolean inspector)
Returns a JFrame suitable or housing the ChartGenerator. This frame largely calls chart.quit() when the JFrame is being closed. By default the JFrame will HIDE itself (not DISPOSE itself) when closed. If inspector == true, the frame will have the look of an inspector


createFrame

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


addLegend

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


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.


buildChartPanel

public sim.util.media.chart.ChartGenerator.ScrollableChartPanel buildChartPanel(JFreeChart chart)