I'm trying to make a chart that contains a XYPlot using TimeSeriesCollections as datasets. Now I wanted to try to set one renderer of the Collections to StandardXYItemRenderer and the other one to XYBarRenderer(). So I did that, compiled it, tried to run it and I've got a NullPointerException thrown. Can anybody tell me what I'm doing wrong?
Here's my code:
Code: Select all
import org.jfree.ui.ApplicationFrame;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.StandardLegend;
import org.jfree.chart.plot.XYPlot;
import org.jfree.data.time.TimeSeriesCollection;
import org.jfree.data.time.Week;
import org.jfree.data.time.TimeSeries;
import org.jfree.chart.renderer.StandardXYItemRenderer;
import org.jfree.chart.renderer.XYBarRenderer;
import org.jfree.chart.axis.AxisLocation;
public class OverlaidChartTest
extends ApplicationFrame
{
public OverlaidChartTest(String title)
{
super(title);
JFreeChart chart = createChart();
ChartPanel panel = new ChartPanel(chart);
setContentPane(panel);
} //OverlaidChartTest()
private JFreeChart createChart()
{
XYPlot plot = new XYPlot();
TimeSeriesCollection collection = new TimeSeriesCollection();
TimeSeries series = new TimeSeries("Serie 1", Week.class);
Week week = new Week(25, 2003);
series.add(week, 10);
week = new Week(26,2003);
series.add(week, 20);
week = new Week(27,2003);
series.add(week, 30);
collection.addSeries(series);
plot.setDataset(collection);
plot.setRenderer(new XYBarRenderer());
collection = new TimeSeriesCollection();
series = new TimeSeries("Serie 2", Week.class);
week = new Week (25,2003);
series.add(week, 40);
week = new Week(26,2003);
series.add(week, 50);
week = new Week(27,2003);
series.add(week,60);
collection.addSeries(series);
plot.setDataset(1, collection);
plot.setRenderer(1, new StandardXYItemRenderer());
plot.setDomainAxisLocation(AxisLocation.BOTTOM_OR_RIGHT);
plot.setRangeAxisLocation(AxisLocation.TOP_OR_LEFT);
JFreeChart chart = new JFreeChart(plot);
chart.setTitle("Overlaid Test");
chart.setLegend(new StandardLegend());
return chart;
}
public static void main(String[] args) {
OverlaidChartTest oct = new OverlaidChartTest("Overlaid Chart Test");
oct.pack();
oct.setLocation(400,300);
oct.setVisible(true);
}
} //OverlaidChartTest
And here's the exception it throws (I'm usind j2sdk se 1.4.03):
Code: Select all
java.lang.NullPointerException
at org.jfree.chart.plot.XYPlot.drawQuadrants(XYPlot.java:1896)
at org.jfree.chart.plot.XYPlot.drawBackground(XYPlot.java:1878)
at org.jfree.chart.plot.XYPlot.draw(XYPlot.java:1743)
at org.jfree.chart.JFreeChart.draw(JFreeChart.java:905)
at org.jfree.chart.ChartPanel.paintComponent(ChartPanel.java:987)
at javax.swing.JComponent.paint(JComponent.java:808)
at javax.swing.JComponent.paintChildren(JComponent.java:647)
at javax.swing.JComponent.paint(JComponent.java:817)
at javax.swing.JLayeredPane.paint(JLayeredPane.java:557)
at javax.swing.JComponent.paintChildren(JComponent.java:647)
at javax.swing.JComponent.paintWithOffscreenBuffer(JComponent.java:4794)
at javax.swing.JComponent.paintDoubleBuffered(JComponent.java:4740)
at javax.swing.JComponent.paint(JComponent.java:798)
at java.awt.GraphicsCallback$PaintCallback.run(GraphicsCallback.java:21)
at sun.awt.SunGraphicsCallback.runOneComponent(SunGraphicsCallback.java:60)
at sun.awt.SunGraphicsCallback.runComponents(SunGraphicsCallback.java:97)
at java.awt.Container.paint(Container.java:1312)
at sun.awt.RepaintArea.paint(RepaintArea.java:177)
at sun.awt.motif.MComponentPeer.handleEvent(MComponentPeer.java:405)
at java.awt.Component.dispatchEventImpl(Component.java:3678)
at java.awt.Container.dispatchEventImpl(Container.java:1627)
at java.awt.Window.dispatchEventImpl(Window.java:1606)
at java.awt.Component.dispatchEvent(Component.java:3477)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:456)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:145)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:137)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:100)