Class ChartGenerator

All Implemented Interfaces:
ImageObserver, MenuContainer, Serializable, Accessible
Direct Known Subclasses:
BoxPlotGenerator, PieChartGenerator, XYChartGenerator

public abstract class ChartGenerator extends 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:

  • The chart proper, stored in a chartPanel. This panel is in turn stored in a JScrollPane.
  • The globalAttributes, a collection of Components on the top-left which control global features of the chart (its title, axis labels, etc.)
  • The seriesAttributes, a scrollable collection of Components on the bottom-left which control features of each separate series in the chart.
See Also:
  • Field Details

    • globalAttributes

      protected Box globalAttributes
      A holder for global attributes components
    • seriesAttributes

      protected Box seriesAttributes
      A holder for series attributes components
    • chart

      protected org.jfree.chart.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:
    • invalidChartTitle

      protected 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 String validChartTitle
    • DEFAULT_CHART_HEIGHT

      public double DEFAULT_CHART_HEIGHT
    • DEFAULT_CHART_PROPORTION

      public double DEFAULT_CHART_PROPORTION
  • Constructor Details

    • ChartGenerator

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

    • setChartPanel

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

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

      public abstract org.jfree.data.general.Dataset getSeriesDataset()
    • setSeriesDataset

      public abstract void setSeriesDataset(org.jfree.data.general.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 org.jfree.chart.ChartPanel getChartPanel()
      Returns the ChartPanel holding the chart.
    • addGlobalAttribute

      public void addGlobalAttribute(Component component)
      Adds a global attribute panel to the frame
    • getGlobalAttribute

      public 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 Component removeGlobalAttribute(int index)
      Remooves the global attribute at the given index and returns it.
    • setInvalidChartTitle

      public void setInvalidChartTitle(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(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 String getTitle()
      Returns the title of the chart
    • getChart

      public org.jfree.chart.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 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 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 JFrame createFrame(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(org.jfree.chart.JFreeChart chart)