Page 1 of 1

rangeAxis.java2DToValue throwing null pointer exception

Posted: Tue Jun 26, 2007 7:50 pm
by lia
I am attempting to use a ChartMouseListener on a combined chart. However when I do I am getting a null pointer exception. I have combined 2 of the demos to illustrate the problem. Does anyone have any suggestions about how I can solve this. Thanks.

Code: Select all


/* -----------------------
 * MouseListenerDemo4.java
 * -----------------------
 * (C) Copyright 2005, by Object Refinery Limited.
 *
 */

//package demo;

import java.awt.Point;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartMouseEvent;
import org.jfree.chart.ChartMouseListener;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.ChartRenderingInfo;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.data.xy.XYDataset;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RectangleEdge;
import org.jfree.ui.RefineryUtilities;

import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.DateAxis;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.labels.StandardXYToolTipGenerator;
import org.jfree.chart.plot.CombinedDomainXYPlot;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYBarRenderer;
import org.jfree.chart.renderer.xy.XYItemRenderer;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.chart.title.LegendTitle;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.time.Month;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;
import org.jfree.data.xy.IntervalXYDataset;
import org.jfree.data.xy.XYDataset;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.HorizontalAlignment;
import org.jfree.ui.RectangleEdge;
import org.jfree.ui.RefineryUtilities;

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.awt.Paint;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;



/**
 * An example showing how to convert the mouse location to chart coordinates.
 */
public class MouseListenerDemo4Plot extends ApplicationFrame
                                implements ChartMouseListener {

    private JFreeChart chart;

    private ChartPanel chartPanel;

    /**
     * A demonstration application showing how to pick up mouse clicks on the
     * legend.
     *
     * @param title  the frame title.
     */
    public MouseListenerDemo4Plot(String title) {
        super(title);
        String chartTitle = "Mouse Listener Demo 4";

         this.chart = createCombinedChart();


        this.chartPanel = new ChartPanel(this.chart);
        this.chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));
        this.chartPanel.setMouseZoomable(true, false);
        this.chartPanel.addChartMouseListener(this);
        setContentPane(this.chartPanel);
    }

       /**
	     * Creates an overlaid chart.
	     *
	     * @return The chart.
	     */
	    private static JFreeChart createCombinedChart() {

	        // create plot ...
	        IntervalXYDataset data1 = createDataset1();
	        XYItemRenderer renderer1 = new XYLineAndShapeRenderer(true, false);
	        renderer1.setBaseToolTipGenerator(new StandardXYToolTipGenerator(
	                StandardXYToolTipGenerator.DEFAULT_TOOL_TIP_FORMAT,
	                new SimpleDateFormat("d-MMM-yyyy"), new DecimalFormat("0.00")));
	        renderer1.setSeriesStroke(0, new BasicStroke(4.0f,
	                BasicStroke.CAP_ROUND, BasicStroke.JOIN_BEVEL));
	        renderer1.setSeriesPaint(0, Color.blue);

	        DateAxis domainAxis = new DateAxis("Year");
	        domainAxis.setLowerMargin(0.0);
	        domainAxis.setUpperMargin(0.02);
	        ValueAxis rangeAxis = new NumberAxis("$billion");
	        XYPlot plot1 = new XYPlot(data1, null, rangeAxis, renderer1);
	        plot1.setBackgroundPaint(Color.lightGray);
	        plot1.setDomainGridlinePaint(Color.white);
	        plot1.setRangeGridlinePaint(Color.white);

	        // add a second dataset and renderer...
	        IntervalXYDataset data2 = createDataset2();
	        XYBarRenderer renderer2 = new XYBarRenderer() {
	            public Paint getItemPaint(int series, int item) {
	                XYDataset dataset = getPlot().getDataset();
	                if (dataset.getYValue(series, item) >= 0.0) {
	                    return Color.red;
	                }
	                else {
	                    return Color.green;
	                }
	            }
	        };
	        renderer2.setSeriesPaint(0, Color.red);
	        renderer2.setDrawBarOutline(false);
	        renderer2.setBaseToolTipGenerator(new StandardXYToolTipGenerator(
	                StandardXYToolTipGenerator.DEFAULT_TOOL_TIP_FORMAT,
	                new SimpleDateFormat("d-MMM-yyyy"), new DecimalFormat("0.00")));

	        XYPlot plot2 = new XYPlot(data2, null, new NumberAxis("$billion"),
	                renderer2);
	        plot2.setBackgroundPaint(Color.lightGray);
	        plot2.setDomainGridlinePaint(Color.white);
	        plot2.setRangeGridlinePaint(Color.white);

	        CombinedDomainXYPlot cplot = new CombinedDomainXYPlot(domainAxis);
	        cplot.add(plot1, 3);
	        cplot.add(plot2, 2);
	        cplot.setGap(8.0);
	        cplot.setDomainGridlinePaint(Color.white);
	        cplot.setDomainGridlinesVisible(true);

	        // return a new chart containing the overlaid plot...
	        JFreeChart chart = new JFreeChart("United States Public Debt",
	                JFreeChart.DEFAULT_TITLE_FONT, cplot, false);
	        chart.setBackgroundPaint(Color.white);
	        TextTitle source = new TextTitle(
	                "Source: http://www.publicdebt.treas.gov/opd/opdhisms.htm",
	                new Font("Dialog", Font.PLAIN, 10));
	        source.setPosition(RectangleEdge.BOTTOM);
	        source.setHorizontalAlignment(HorizontalAlignment.RIGHT);
	        chart.addSubtitle(source);
	        LegendTitle legend = new LegendTitle(cplot);
	        chart.addSubtitle(legend);
	        return chart;
	    }

	    /**
	     * Creates a sample dataset.  You wouldn't normally hard-code the
	     * population of a dataset in this way (it would be better to read the
	     * values from a file or a database query), but for a self-contained demo
	     * this is the least complicated solution.
	     *
	     * @return The dataset.
	     */
	    private static IntervalXYDataset createDataset1() {

	        // create dataset 1...
	        TimeSeries series1 = new TimeSeries("Public Debt Outstanding",
	                Month.class);
	        series1.add(new Month(1, 1990), 2974.584);
	        series1.add(new Month(2, 1990), 2994.354);
	        series1.add(new Month(3, 1990), 3051.956);
	        series1.add(new Month(4, 1990), 3061.013);
	        series1.add(new Month(5, 1990), 3095.172);
	        series1.add(new Month(6, 1990), 3143.754);
	        series1.add(new Month(7, 1990), 3168.772);
	        series1.add(new Month(8, 1990), 3211.691);
	        series1.add(new Month(9, 1990), 3233.313);
	        series1.add(new Month(10, 1990), 3274.950);
	        series1.add(new Month(11, 1990), 3330.685);
	        series1.add(new Month(12, 1990), 3364.820);
	        series1.add(new Month(1, 1991), 3411.409);
	        series1.add(new Month(2, 1991), 3458.637);
	        series1.add(new Month(3, 1991), 3441.367);
	        series1.add(new Month(4, 1991), 3445.059);
	        series1.add(new Month(5, 1991), 3497.232);
	        series1.add(new Month(6, 1991), 3537.988);
	        series1.add(new Month(7, 1991), 3576.827);
	        series1.add(new Month(8, 1991), 3614.399);
	        series1.add(new Month(9, 1991), 3665.303);
	        series1.add(new Month(10, 1991), 3717.106);
	        series1.add(new Month(11, 1991), 3747.363);
	        series1.add(new Month(12, 1991), 3801.698);
	        series1.add(new Month(1, 1992), 3809.334);
	        series1.add(new Month(2, 1992), 3829.059);
	        series1.add(new Month(3, 1992), 3881.288);
	        series1.add(new Month(4, 1992), 3891.974);
	        series1.add(new Month(5, 1992), 3934.435);
	        series1.add(new Month(6, 1992), 3984.656);
	        series1.add(new Month(7, 1992), 4010.612);
	        series1.add(new Month(8, 1992), 4048.938);
	        series1.add(new Month(9, 1992), 4064.621);
	        series1.add(new Month(10, 1992), 4067.329);
	        series1.add(new Month(11, 1992), 4132.525);
	        series1.add(new Month(12, 1992), 4177.009);
	        series1.add(new Month(1, 1993), 4167.200);
	        series1.add(new Month(2, 1993), 4197.004);
	        series1.add(new Month(3, 1993), 4230.580);
	        series1.add(new Month(4, 1993), 4254.084);
	        series1.add(new Month(5, 1993), 4296.278);
	        series1.add(new Month(6, 1993), 4351.950);
	        series1.add(new Month(7, 1993), 4350.261);
	        series1.add(new Month(8, 1993), 4403.313);
	        series1.add(new Month(9, 1993), 4411.489);
	        series1.add(new Month(10, 1993), 4422.511);
	        series1.add(new Month(11, 1993), 4493.535);
	        series1.add(new Month(12, 1993), 4535.687);
	        series1.add(new Month(1, 1994), 4526.308);
	        series1.add(new Month(2, 1994), 4559.541);
	        series1.add(new Month(3, 1994), 4575.869);
	        series1.add(new Month(4, 1994), 4568.704);
	        series1.add(new Month(5, 1994), 4609.296);
	        series1.add(new Month(6, 1994), 4645.802);
	        series1.add(new Month(7, 1994), 4636.362);
	        series1.add(new Month(8, 1994), 4691.991);
	        series1.add(new Month(9, 1994), 4692.750);
	        series1.add(new Month(10, 1994), 4734.167);
	        series1.add(new Month(11, 1994), 4778.520);
	        series1.add(new Month(12, 1994), 4800.150);
	        series1.add(new Month(1, 1995), 4815.827);
	        series1.add(new Month(2, 1995), 4854.298);
	        series1.add(new Month(3, 1995), 4864.116);
	        series1.add(new Month(4, 1995), 4852.327);
	        series1.add(new Month(5, 1995), 4903.926);
	        series1.add(new Month(6, 1995), 4951.372);
	        series1.add(new Month(7, 1995), 4960.152);
	        series1.add(new Month(8, 1995), 4970.756);
	        series1.add(new Month(9, 1995), 4973.983);
	        series1.add(new Month(10, 1995), 4985.262);
	        series1.add(new Month(11, 1995), 4989.330);
	        series1.add(new Month(12, 1995), 4988.665);
	        series1.add(new Month(1, 1996), 4987.436);
	        series1.add(new Month(2, 1996), 5017.041);
	        series1.add(new Month(3, 1996), 5117.786);
	        series1.add(new Month(4, 1996), 5102.049);
	        series1.add(new Month(5, 1996), 5128.509);
	        series1.add(new Month(6, 1996), 5161.076);
	        series1.add(new Month(7, 1996), 5188.889);
	        series1.add(new Month(8, 1996), 5208.303);
	        series1.add(new Month(9, 1996), 5224.811);
	        series1.add(new Month(10, 1996), 5247.320);
	        series1.add(new Month(11, 1996), 5296.549);
	        series1.add(new Month(12, 1996), 5323.172);
	        series1.add(new Month(1, 1997), 5313.997);
	        series1.add(new Month(2, 1997), 5349.937);
	        series1.add(new Month(3, 1997), 5380.890);
	        series1.add(new Month(4, 1997), 5353.971);
	        series1.add(new Month(5, 1997), 5344.961);
	        series1.add(new Month(6, 1997), 5376.151);
	        series1.add(new Month(7, 1997), 5373.231);
	        series1.add(new Month(8, 1997), 5404.420);
	        series1.add(new Month(9, 1997), 5413.146);
	        series1.add(new Month(10, 1997), 5427.225);
	        series1.add(new Month(11, 1997), 5462.622);
	        series1.add(new Month(12, 1997), 5502.388);
	        series1.add(new Month(1, 1998), 5490.064);
	        series1.add(new Month(2, 1998), 5520.668);
	        series1.add(new Month(3, 1998), 5542.426);
	        series1.add(new Month(4, 1998), 5499.895);
	        series1.add(new Month(5, 1998), 5506.356);
	        series1.add(new Month(6, 1998), 5547.935);
	        series1.add(new Month(7, 1998), 5527.738);
	        series1.add(new Month(8, 1998), 5564.553);
	        series1.add(new Month(9, 1998), 5526.193);
	        series1.add(new Month(10, 1998), 5559.255);
	        series1.add(new Month(11, 1998), 5591.979);
	        series1.add(new Month(12, 1998), 5614.217);
	        series1.add(new Month(1, 1999), 5610.117);
	        series1.add(new Month(2, 1999), 5621.946);
	        series1.add(new Month(3, 1999), 5651.615);
	        series1.add(new Month(4, 1999), 5585.840);
	        series1.add(new Month(5, 1999), 5604.198);
	        series1.add(new Month(6, 1999), 5638.780);
	        series1.add(new Month(7, 1999), 5638.656);
	        series1.add(new Month(8, 1999), 5672.386);
	        series1.add(new Month(9, 1999), 5656.271);
	        series1.add(new Month(10, 1999), 5679.727);
	        series1.add(new Month(11, 1999), 5693.600);
	        series1.add(new Month(12, 1999), 5776.091);
	        series1.add(new Month(1, 2000), 5711.285);
	        series1.add(new Month(2, 2000), 5735.333);
	        series1.add(new Month(3, 2000), 5773.392);
	        series1.add(new Month(4, 2000), 5685.108);
	        series1.add(new Month(5, 2000), 5647.170);
	        series1.add(new Month(6, 2000), 5685.938);
	        series1.add(new Month(7, 2000), 5658.807);
	        series1.add(new Month(8, 2000), 5677.822);
	        series1.add(new Month(9, 2000), 5674.178);
	        series1.add(new Month(10, 2000), 5657.328);
	        series1.add(new Month(11, 2000), 5709.699);
	        series1.add(new Month(12, 2000), 5662.216);
	        series1.add(new Month(1, 2001), 5716.071);
	        series1.add(new Month(2, 2001), 5735.859);
	        series1.add(new Month(3, 2001), 5773.740);
	        series1.add(new Month(4, 2001), 5661.348);
	        series1.add(new Month(5, 2001), 5656.182);
	        series1.add(new Month(6, 2001), 5726.815);
	        series1.add(new Month(7, 2001), 5718.303);
	        series1.add(new Month(8, 2001), 5769.876);
	        series1.add(new Month(9, 2001), 5807.463);
	        series1.add(new Month(10, 2001), 5815.983);
	        series1.add(new Month(11, 2001), 5888.897);
	        series1.add(new Month(12, 2001), 5943.439);
	        series1.add(new Month(1, 2002), 5937.229);
	        series1.add(new Month(2, 2002), 6003.453);
	        series1.add(new Month(3, 2002), 6006.032);
	        series1.add(new Month(4, 2002), 5984.677);
	        series1.add(new Month(5, 2002), 6019.332);
	        series1.add(new Month(6, 2002), 6126.469);
	        series1.add(new Month(7, 2002), 6159.741);
	        series1.add(new Month(8, 2002), 6210.482);
	        series1.add(new Month(9, 2002), 6228.236);
	        series1.add(new Month(10, 2002), 6282.528);
	        series1.add(new Month(11, 2002), 6343.460);
	        series1.add(new Month(12, 2002), 6405.707);
	        series1.add(new Month(1, 2003), 6401.377);
	        series1.add(new Month(2, 2003), 6445.790);
	        series1.add(new Month(3, 2003), 6460.776);
	        series1.add(new Month(4, 2003), 6460.381);
	        series1.add(new Month(5, 2003), 6558.147);
	        series1.add(new Month(6, 2003), 6670.121);
	        series1.add(new Month(7, 2003), 6751.195);
	        series1.add(new Month(8, 2003), 6790.041);
	        series1.add(new Month(9, 2003), 6783.231);
	        series1.add(new Month(10, 2003), 6872.676);
	        series1.add(new Month(11, 2003), 6925.065);
	        series1.add(new Month(12, 2003), 6997.964);
	        series1.add(new Month(1, 2004), 7009.235);
	        series1.add(new Month(2, 2004), 7091.943);
	        series1.add(new Month(3, 2004), 7131.068);
	        series1.add(new Month(4, 2004), 7133.789);
	        series1.add(new Month(5, 2004), 7196.383);
	        series1.add(new Month(6, 2004), 7274.335);
	        series1.add(new Month(7, 2004), 7316.568);
	        series1.add(new Month(8, 2004), 7350.950);
	        series1.add(new Month(9, 2004), 7379.053);
	        series1.add(new Month(10, 2004), 7429.677);
	        series1.add(new Month(11, 2004), 7525.210);
	        series1.add(new Month(12, 2004), 7596.144);
	        series1.add(new Month(1, 2005), 7627.743);
	        series1.add(new Month(2, 2005), 7713.138);
	        series1.add(new Month(3, 2005), 7776.939);
	        series1.add(new Month(4, 2005), 7764.537);
	        series1.add(new Month(5, 2005), 7777.880);
	        series1.add(new Month(6, 2005), 7836.496);
	        series1.add(new Month(7, 2005), 7887.618);
	        series1.add(new Month(8, 2005), 7926.933);
	        series1.add(new Month(9, 2005), 7932.710);
	        series1.add(new Month(10, 2005), 8027.123);
	        series1.add(new Month(11, 2005), 8092.322);
	        series1.add(new Month(12, 2005), 8170.414);
	        series1.add(new Month(1, 2006), 8196.070);
	        series1.add(new Month(2, 2006), 8269.886);
	        series1.add(new Month(3, 2006), 8371.156);
	        series1.add(new Month(4, 2006), 8355.718);
	        series1.add(new Month(5, 2006), 8356.777);
	        series1.add(new Month(6, 2006), 8420.042);
	        series1.add(new Month(7, 2006), 8444.347);
	        series1.add(new Month(8, 2006), 8515.034);
	        series1.add(new Month(9, 2006), 8506.974);
	        series1.add(new Month(10, 2006), 8584.329);
	        series1.add(new Month(11, 2006), 8633.246);
	        series1.add(new Month(12, 2006), 8680.224);
	        series1.add(new Month(1, 2007), 8707.561);
	        return new TimeSeriesCollection(series1);

	    }

	    /**
	     * Creates a sample dataset.  You wouldn't normally hard-code the
	     * population of a dataset in this way (it would be better to read the
	     * values from a file or a database query), but for a self-contained demo
	     * this is the least complicated solution.
	     *
	     * @return A sample dataset.
	     */
	    private static IntervalXYDataset createDataset2() {
	        TimeSeriesCollection dataset = new TimeSeriesCollection();

	        TimeSeries series1 = new TimeSeries("Change from previous year",
	                Month.class);
	        series1.add(new Month(1, 1990), 276.627);
	        series1.add(new Month(2, 1990), 271.509);
	        series1.add(new Month(3, 1990), 311.058);
	        series1.add(new Month(4, 1990), 304.345);
	        series1.add(new Month(5, 1990), 317.632);
	        series1.add(new Month(6, 1990), 343.831);
	        series1.add(new Month(7, 1990), 368.317);
	        series1.add(new Month(8, 1990), 375.266);
	        series1.add(new Month(9, 1990), 375.882);
	        series1.add(new Month(10, 1990), 373.731);
	        series1.add(new Month(11, 1990), 407.096);
	        series1.add(new Month(12, 1990), 411.826);
	        series1.add(new Month(1, 1991), 436.825);
	        series1.add(new Month(2, 1991), 464.283);
	        series1.add(new Month(3, 1991), 389.411);
	        series1.add(new Month(4, 1991), 384.046);
	        series1.add(new Month(5, 1991), 402.060);
	        series1.add(new Month(6, 1991), 394.234);
	        series1.add(new Month(7, 1991), 408.055);
	        series1.add(new Month(8, 1991), 402.708);
	        series1.add(new Month(9, 1991), 431.990);
	        series1.add(new Month(10, 1991), 442.156);
	        series1.add(new Month(11, 1991), 416.678);
	        series1.add(new Month(12, 1991), 436.878);
	        series1.add(new Month(1, 1992), 397.925);
	        series1.add(new Month(2, 1992), 370.422);
	        series1.add(new Month(3, 1992), 439.921);
	        series1.add(new Month(4, 1992), 446.915);
	        series1.add(new Month(5, 1992), 437.203);
	        series1.add(new Month(6, 1992), 446.668);
	        series1.add(new Month(7, 1992), 433.785);
	        series1.add(new Month(8, 1992), 434.539);
	        series1.add(new Month(9, 1992), 399.318);
	        series1.add(new Month(10, 1992), 350.223);
	        series1.add(new Month(11, 1992), 385.162);
	        series1.add(new Month(12, 1992), 375.311);
	        series1.add(new Month(1, 1993), 357.866);
	        series1.add(new Month(2, 1993), 367.945);
	        series1.add(new Month(3, 1993), 349.292);
	        series1.add(new Month(4, 1993), 362.110);
	        series1.add(new Month(5, 1993), 361.843);
	        series1.add(new Month(6, 1993), 367.294);
	        series1.add(new Month(7, 1993), 339.649);
	        series1.add(new Month(8, 1993), 354.375);
	        series1.add(new Month(9, 1993), 346.868);
	        series1.add(new Month(10, 1993), 355.182);
	        series1.add(new Month(11, 1993), 361.010);
	        series1.add(new Month(12, 1993), 358.678);
	        series1.add(new Month(1, 1994), 359.108);
	        series1.add(new Month(2, 1994), 362.537);
	        series1.add(new Month(3, 1994), 345.289);
	        series1.add(new Month(4, 1994), 314.620);
	        series1.add(new Month(5, 1994), 313.018);
	        series1.add(new Month(6, 1994), 293.852);
	        series1.add(new Month(7, 1994), 286.101);
	        series1.add(new Month(8, 1994), 288.678);
	        series1.add(new Month(9, 1994), 281.261);
	        series1.add(new Month(10, 1994), 311.656);
	        series1.add(new Month(11, 1994), 284.985);
	        series1.add(new Month(12, 1994), 264.463);
	        series1.add(new Month(1, 1995), 289.519);
	        series1.add(new Month(2, 1995), 294.757);
	        series1.add(new Month(3, 1995), 288.247);
	        series1.add(new Month(4, 1995), 283.623);
	        series1.add(new Month(5, 1995), 294.630);
	        series1.add(new Month(6, 1995), 305.570);
	        series1.add(new Month(7, 1995), 323.790);
	        series1.add(new Month(8, 1995), 278.765);
	        series1.add(new Month(9, 1995), 281.233);
	        series1.add(new Month(10, 1995), 251.095);
	        series1.add(new Month(11, 1995), 210.810);
	        series1.add(new Month(12, 1995), 188.515);
	        series1.add(new Month(1, 1996), 171.609);
	        series1.add(new Month(2, 1996), 162.743);
	        series1.add(new Month(3, 1996), 253.670);
	        series1.add(new Month(4, 1996), 249.722);
	        series1.add(new Month(5, 1996), 224.583);
	        series1.add(new Month(6, 1996), 209.704);
	        series1.add(new Month(7, 1996), 228.737);
	        series1.add(new Month(8, 1996), 237.547);
	        series1.add(new Month(9, 1996), 250.828);
	        series1.add(new Month(10, 1996), 262.058);
	        series1.add(new Month(11, 1996), 307.219);
	        series1.add(new Month(12, 1996), 334.507);
	        series1.add(new Month(1, 1997), 326.561);
	        series1.add(new Month(2, 1997), 332.896);
	        series1.add(new Month(3, 1997), 263.104);
	        series1.add(new Month(4, 1997), 251.922);
	        series1.add(new Month(5, 1997), 216.452);
	        series1.add(new Month(6, 1997), 215.075);
	        series1.add(new Month(7, 1997), 184.342);
	        series1.add(new Month(8, 1997), 196.117);
	        series1.add(new Month(9, 1997), 188.335);
	        series1.add(new Month(10, 1997), 179.905);
	        series1.add(new Month(11, 1997), 166.073);
	        series1.add(new Month(12, 1997), 179.216);
	        series1.add(new Month(1, 1998), 176.067);
	        series1.add(new Month(2, 1998), 170.731);
	        series1.add(new Month(3, 1998), 161.536);
	        series1.add(new Month(4, 1998), 145.924);
	        series1.add(new Month(5, 1998), 161.395);
	        series1.add(new Month(6, 1998), 171.784);
	        series1.add(new Month(7, 1998), 154.507);
	        series1.add(new Month(8, 1998), 160.133);
	        series1.add(new Month(9, 1998), 113.047);
	        series1.add(new Month(10, 1998), 132.030);
	        series1.add(new Month(11, 1998), 129.357);
	        series1.add(new Month(12, 1998), 111.829);
	        series1.add(new Month(1, 1999), 120.053);
	        series1.add(new Month(2, 1999), 101.278);
	        series1.add(new Month(3, 1999), 109.189);
	        series1.add(new Month(4, 1999), 85.945);
	        series1.add(new Month(5, 1999), 97.842);
	        series1.add(new Month(6, 1999), 90.845);
	        series1.add(new Month(7, 1999), 110.918);
	        series1.add(new Month(8, 1999), 107.833);
	        series1.add(new Month(9, 1999), 130.078);
	        series1.add(new Month(10, 1999), 120.472);
	        series1.add(new Month(11, 1999), 101.621);
	        series1.add(new Month(12, 1999), 161.874);
	        series1.add(new Month(1, 2000), 101.168);
	        series1.add(new Month(2, 2000), 113.387);
	        series1.add(new Month(3, 2000), 121.777);
	        series1.add(new Month(4, 2000), 99.268);
	        series1.add(new Month(5, 2000), 42.972);
	        series1.add(new Month(6, 2000), 47.158);
	        series1.add(new Month(7, 2000), 20.151);
	        series1.add(new Month(8, 2000), 5.436);
	        series1.add(new Month(9, 2000), 17.907);
	        series1.add(new Month(10, 2000), -22.399);
	        series1.add(new Month(11, 2000), 16.099);
	        series1.add(new Month(12, 2000), -113.875);
	        series1.add(new Month(1, 2001), 4.786);
	        series1.add(new Month(2, 2001), .526);
	        series1.add(new Month(3, 2001), .348);
	        series1.add(new Month(4, 2001), -23.760);
	        series1.add(new Month(5, 2001), 9.012);
	        series1.add(new Month(6, 2001), 40.877);
	        series1.add(new Month(7, 2001), 59.496);
	        series1.add(new Month(8, 2001), 92.054);
	        series1.add(new Month(9, 2001), 133.285);
	        series1.add(new Month(10, 2001), 158.655);
	        series1.add(new Month(11, 2001), 179.198);
	        series1.add(new Month(12, 2001), 281.223);
	        series1.add(new Month(1, 2002), 221.158);
	        series1.add(new Month(2, 2002), 267.594);
	        series1.add(new Month(3, 2002), 232.292);
	        series1.add(new Month(4, 2002), 323.329);
	        series1.add(new Month(5, 2002), 363.150);
	        series1.add(new Month(6, 2002), 399.654);
	        series1.add(new Month(7, 2002), 441.438);
	        series1.add(new Month(8, 2002), 440.606);
	        series1.add(new Month(9, 2002), 420.773);
	        series1.add(new Month(10, 2002), 466.545);
	        series1.add(new Month(11, 2002), 454.563);
	        series1.add(new Month(12, 2002), 462.268);
	        series1.add(new Month(1, 2003), 464.148);
	        series1.add(new Month(2, 2003), 442.337);
	        series1.add(new Month(3, 2003), 454.744);
	        series1.add(new Month(4, 2003), 475.704);
	        series1.add(new Month(5, 2003), 538.815);
	        series1.add(new Month(6, 2003), 543.652);
	        series1.add(new Month(7, 2003), 591.454);
	        series1.add(new Month(8, 2003), 579.559);
	        series1.add(new Month(9, 2003), 554.995);
	        series1.add(new Month(10, 2003), 590.148);
	        series1.add(new Month(11, 2003), 581.605);
	        series1.add(new Month(12, 2003), 592.257);
	        series1.add(new Month(1, 2004), 607.858);
	        series1.add(new Month(2, 2004), 646.153);
	        series1.add(new Month(3, 2004), 670.292);
	        series1.add(new Month(4, 2004), 673.408);
	        series1.add(new Month(5, 2004), 638.236);
	        series1.add(new Month(6, 2004), 604.214);
	        series1.add(new Month(7, 2004), 565.373);
	        series1.add(new Month(8, 2004), 560.909);
	        series1.add(new Month(9, 2004), 595.822);
	        series1.add(new Month(10, 2004), 557.001);
	        series1.add(new Month(11, 2004), 600.145);
	        series1.add(new Month(12, 2004), 598.180);
	        series1.add(new Month(1, 2005), 618.508);
	        series1.add(new Month(2, 2005), 621.195);
	        series1.add(new Month(3, 2005), 645.871);
	        series1.add(new Month(4, 2005), 630.748);
	        series1.add(new Month(5, 2005), 581.497);
	        series1.add(new Month(6, 2005), 562.161);
	        series1.add(new Month(7, 2005), 571.050);
	        series1.add(new Month(8, 2005), 575.983);
	        series1.add(new Month(9, 2005), 553.657);
	        series1.add(new Month(10, 2005), 597.446);
	        series1.add(new Month(11, 2005), 567.112);
	        series1.add(new Month(12, 2005), 574.270);
	        series1.add(new Month(1, 2006), 568.327);
	        series1.add(new Month(2, 2006), 556.748);
	        series1.add(new Month(3, 2006), 594.217);
	        series1.add(new Month(4, 2006), 591.181);
	        series1.add(new Month(5, 2006), 578.897);
	        series1.add(new Month(6, 2006), 583.546);
	        series1.add(new Month(7, 2006), 556.729);
	        series1.add(new Month(8, 2006), 588.101);
	        series1.add(new Month(9, 2006), 574.264);
	        series1.add(new Month(10, 2006), 557.206);
	        series1.add(new Month(11, 2006), 540.924);
	        series1.add(new Month(12, 2006), 509.810);
	        series1.add(new Month(1, 2007), 511.491);
	        dataset.addSeries(series1);
	        return dataset;

    }



    /**
     * Receives chart mouse click events.
     *
     * @param event  the event.
     */
    public void chartMouseClicked(ChartMouseEvent event) {
        int mouseX = event.getTrigger().getX();
        int mouseY = event.getTrigger().getY();
        System.out.println("x = " + mouseX + ", y = " + mouseY);
        Point2D p = this.chartPanel.translateScreenToJava2D(
                new Point(mouseX, mouseY));
        XYPlot plot = (XYPlot) this.chart.getPlot();
        ChartRenderingInfo info = this.chartPanel.getChartRenderingInfo();
        Rectangle2D dataArea = info.getPlotInfo().getDataArea();

        ValueAxis domainAxis = plot.getDomainAxis();
        RectangleEdge domainAxisEdge = plot.getDomainAxisEdge();
        ValueAxis rangeAxis = plot.getRangeAxis();
        RectangleEdge rangeAxisEdge = plot.getRangeAxisEdge();
        System.out.println("--------------1");

        double chartX = domainAxis.java2DToValue(p.getX(), dataArea,
                domainAxisEdge);
         System.out.println("--------------2");

        double chartY = rangeAxis.java2DToValue(p.getY(), dataArea,
                rangeAxisEdge);
          System.out.println("--------------3");
        System.out.println("Chart: x = " + chartX + ", y = " + chartY);
    }

    /**
     * Receives chart mouse moved events.
     *
     * @param event  the event.
     */
    public void chartMouseMoved(ChartMouseEvent event) {
        // ignore
    }

    /**
     * Starting point for the demonstration application.
     *
     * @param args  ignored.
     */
    public static void main(String[] args) {
        MouseListenerDemo4Plot demo = new MouseListenerDemo4Plot(
            "Mouse Listener Demo 4 Plot");
        demo.pack();
        RefineryUtilities.centerFrameOnScreen(demo);
        demo.setVisible(true);
    }

}

There's still something I'm missing

Posted: Wed Jun 27, 2007 3:42 am
by lia
I have been searching the forum for similar problems and have managed to make some changes that resolve the null pointer issue but I am still not able to get the annotations to show up. Here is the new code. If you can see what is wrong please tell me Thanks.

Code: Select all

/* -----------------------
 * MouseListenerDemo4.java
 * -----------------------
 * (C) Copyright 2005, by Object Refinery Limited.
 *
 */

//package demo;

import java.awt.Point;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartMouseEvent;
import org.jfree.chart.ChartMouseListener;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.ChartRenderingInfo;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.data.xy.XYDataset;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RectangleEdge;
import org.jfree.ui.RefineryUtilities;

import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.DateAxis;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.labels.StandardXYToolTipGenerator;
import org.jfree.chart.plot.CombinedDomainXYPlot;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYBarRenderer;
import org.jfree.chart.renderer.xy.XYItemRenderer;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.chart.title.LegendTitle;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.time.Month;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;
import org.jfree.data.xy.IntervalXYDataset;
import org.jfree.data.xy.XYDataset;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.HorizontalAlignment;
import org.jfree.ui.RectangleEdge;
import org.jfree.ui.RefineryUtilities;

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.awt.Paint;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import org.jfree.chart.annotations.XYLineAnnotation;
import org.jfree.chart.plot.CombinedDomainXYPlot;
import org.jfree.chart.plot.PlotRenderingInfo;



/**
 * An example showing how to convert the mouse location to chart coordinates.
 */
public class MouseListenerDemo4Plot extends ApplicationFrame
                                implements ChartMouseListener {

    private JFreeChart chart;

    private ChartPanel chartPanel;

    private	int count = 0;

	private	double firstChartX = 0.0;

	private	double firstChartY = 0.0;

	private	double secondChartX = 0.0;

	private	double secondChartY = 0.0;

	private	XYLineAnnotation xYLineAnnotation = null;


    /**
     * A demonstration application showing how to pick up mouse clicks on the
     * legend.
     *
     * @param title  the frame title.
     */
    public MouseListenerDemo4Plot(String title) {
        super(title);
        String chartTitle = "Mouse Listener Demo 4";

         this.chart = createCombinedChart();


        this.chartPanel = new ChartPanel(this.chart);
        this.chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));
        this.chartPanel.setMouseZoomable(true, false);
        this.chartPanel.addChartMouseListener(this);
        setContentPane(this.chartPanel);
    }

       /**
	     * Creates an overlaid chart.
	     *
	     * @return The chart.
	     */
	    private static JFreeChart createCombinedChart() {

	        // create plot ...
	        IntervalXYDataset data1 = createDataset1();
	        XYItemRenderer renderer1 = new XYLineAndShapeRenderer(true, false);
	        renderer1.setBaseToolTipGenerator(new StandardXYToolTipGenerator(
	                StandardXYToolTipGenerator.DEFAULT_TOOL_TIP_FORMAT,
	                new SimpleDateFormat("d-MMM-yyyy"), new DecimalFormat("0.00")));
	        renderer1.setSeriesStroke(0, new BasicStroke(4.0f,
	                BasicStroke.CAP_ROUND, BasicStroke.JOIN_BEVEL));
	        renderer1.setSeriesPaint(0, Color.blue);

	        DateAxis domainAxis = new DateAxis("Year");
	        domainAxis.setLowerMargin(0.0);
	        domainAxis.setUpperMargin(0.02);
	        ValueAxis rangeAxis = new NumberAxis("$billion");
	        XYPlot plot1 = new XYPlot(data1, null, rangeAxis, renderer1);
	        plot1.setBackgroundPaint(Color.lightGray);
	        plot1.setDomainGridlinePaint(Color.white);
	        plot1.setRangeGridlinePaint(Color.white);

	        // add a second dataset and renderer...
	        IntervalXYDataset data2 = createDataset2();
	        XYBarRenderer renderer2 = new XYBarRenderer() {
	            public Paint getItemPaint(int series, int item) {
	                XYDataset dataset = getPlot().getDataset();
	                if (dataset.getYValue(series, item) >= 0.0) {
	                    return Color.red;
	                }
	                else {
	                    return Color.green;
	                }
	            }
	        };
	        renderer2.setSeriesPaint(0, Color.red);
	        renderer2.setDrawBarOutline(false);
	        renderer2.setBaseToolTipGenerator(new StandardXYToolTipGenerator(
	                StandardXYToolTipGenerator.DEFAULT_TOOL_TIP_FORMAT,
	                new SimpleDateFormat("d-MMM-yyyy"), new DecimalFormat("0.00")));

	        XYPlot plot2 = new XYPlot(data2, null, new NumberAxis("$billion"),
	                renderer2);
	        plot2.setBackgroundPaint(Color.lightGray);
	        plot2.setDomainGridlinePaint(Color.white);
	        plot2.setRangeGridlinePaint(Color.white);

	        CombinedDomainXYPlot cplot = new CombinedDomainXYPlot(domainAxis);
	        cplot.add(plot1, 3);
	        cplot.add(plot2, 2);
	        cplot.setGap(8.0);
	        cplot.setDomainGridlinePaint(Color.white);
	        cplot.setDomainGridlinesVisible(true);

	        // return a new chart containing the overlaid plot...
	        JFreeChart chart = new JFreeChart("United States Public Debt",
	                JFreeChart.DEFAULT_TITLE_FONT, cplot, false);
	        chart.setBackgroundPaint(Color.white);
	        TextTitle source = new TextTitle(
	                "Source: http://www.publicdebt.treas.gov/opd/opdhisms.htm",
	                new Font("Dialog", Font.PLAIN, 10));
	        source.setPosition(RectangleEdge.BOTTOM);
	        source.setHorizontalAlignment(HorizontalAlignment.RIGHT);
	        chart.addSubtitle(source);
	        LegendTitle legend = new LegendTitle(cplot);
	        chart.addSubtitle(legend);
	        return chart;
	    }

	    /**
	     * Creates a sample dataset.  You wouldn't normally hard-code the
	     * population of a dataset in this way (it would be better to read the
	     * values from a file or a database query), but for a self-contained demo
	     * this is the least complicated solution.
	     *
	     * @return The dataset.
	     */
	    private static IntervalXYDataset createDataset1() {

	        // create dataset 1...
	        TimeSeries series1 = new TimeSeries("Public Debt Outstanding",
	                Month.class);
	        series1.add(new Month(1, 1990), 2974.584);
	        series1.add(new Month(2, 1990), 2994.354);
	        series1.add(new Month(3, 1990), 3051.956);
	        series1.add(new Month(4, 1990), 3061.013);
	        series1.add(new Month(5, 1990), 3095.172);
	        series1.add(new Month(6, 1990), 3143.754);
	        series1.add(new Month(7, 1990), 3168.772);
	        series1.add(new Month(8, 1990), 3211.691);
	        series1.add(new Month(9, 1990), 3233.313);
	        series1.add(new Month(10, 1990), 3274.950);
	        series1.add(new Month(11, 1990), 3330.685);
	        series1.add(new Month(12, 1990), 3364.820);
	        series1.add(new Month(1, 1991), 3411.409);
	        series1.add(new Month(2, 1991), 3458.637);
	        series1.add(new Month(3, 1991), 3441.367);
	        series1.add(new Month(4, 1991), 3445.059);
	        series1.add(new Month(5, 1991), 3497.232);
	        series1.add(new Month(6, 1991), 3537.988);
	        series1.add(new Month(7, 1991), 3576.827);
	        series1.add(new Month(8, 1991), 3614.399);
	        series1.add(new Month(9, 1991), 3665.303);
	        series1.add(new Month(10, 1991), 3717.106);
	        series1.add(new Month(11, 1991), 3747.363);
	        series1.add(new Month(12, 1991), 3801.698);
	        series1.add(new Month(1, 1992), 3809.334);
	        series1.add(new Month(2, 1992), 3829.059);
	        series1.add(new Month(3, 1992), 3881.288);
	        series1.add(new Month(4, 1992), 3891.974);
	        series1.add(new Month(5, 1992), 3934.435);
	        series1.add(new Month(6, 1992), 3984.656);
	        series1.add(new Month(7, 1992), 4010.612);
	        series1.add(new Month(8, 1992), 4048.938);
	        series1.add(new Month(9, 1992), 4064.621);
	        series1.add(new Month(10, 1992), 4067.329);
	        series1.add(new Month(11, 1992), 4132.525);
	        series1.add(new Month(12, 1992), 4177.009);
	        series1.add(new Month(1, 1993), 4167.200);
	        series1.add(new Month(2, 1993), 4197.004);
	        series1.add(new Month(3, 1993), 4230.580);
	        series1.add(new Month(4, 1993), 4254.084);
	        series1.add(new Month(5, 1993), 4296.278);
	        series1.add(new Month(6, 1993), 4351.950);
	        series1.add(new Month(7, 1993), 4350.261);
	        series1.add(new Month(8, 1993), 4403.313);
	        series1.add(new Month(9, 1993), 4411.489);
	        series1.add(new Month(10, 1993), 4422.511);
	        series1.add(new Month(11, 1993), 4493.535);
	        series1.add(new Month(12, 1993), 4535.687);
	        series1.add(new Month(1, 1994), 4526.308);
	        series1.add(new Month(2, 1994), 4559.541);
	        series1.add(new Month(3, 1994), 4575.869);
	        series1.add(new Month(4, 1994), 4568.704);
	        series1.add(new Month(5, 1994), 4609.296);
	        series1.add(new Month(6, 1994), 4645.802);
	        series1.add(new Month(7, 1994), 4636.362);
	        series1.add(new Month(8, 1994), 4691.991);
	        series1.add(new Month(9, 1994), 4692.750);
	        series1.add(new Month(10, 1994), 4734.167);
	        series1.add(new Month(11, 1994), 4778.520);
	        series1.add(new Month(12, 1994), 4800.150);
	        series1.add(new Month(1, 1995), 4815.827);
	        series1.add(new Month(2, 1995), 4854.298);
	        series1.add(new Month(3, 1995), 4864.116);
	        series1.add(new Month(4, 1995), 4852.327);
	        series1.add(new Month(5, 1995), 4903.926);
	        series1.add(new Month(6, 1995), 4951.372);
	        series1.add(new Month(7, 1995), 4960.152);
	        series1.add(new Month(8, 1995), 4970.756);
	        series1.add(new Month(9, 1995), 4973.983);
	        series1.add(new Month(10, 1995), 4985.262);
	        series1.add(new Month(11, 1995), 4989.330);
	        series1.add(new Month(12, 1995), 4988.665);
	        series1.add(new Month(1, 1996), 4987.436);
	        series1.add(new Month(2, 1996), 5017.041);
	        series1.add(new Month(3, 1996), 5117.786);
	        series1.add(new Month(4, 1996), 5102.049);
	        series1.add(new Month(5, 1996), 5128.509);
	        series1.add(new Month(6, 1996), 5161.076);
	        series1.add(new Month(7, 1996), 5188.889);
	        series1.add(new Month(8, 1996), 5208.303);
	        series1.add(new Month(9, 1996), 5224.811);
	        series1.add(new Month(10, 1996), 5247.320);
	        series1.add(new Month(11, 1996), 5296.549);
	        series1.add(new Month(12, 1996), 5323.172);
	        series1.add(new Month(1, 1997), 5313.997);
	        series1.add(new Month(2, 1997), 5349.937);
	        series1.add(new Month(3, 1997), 5380.890);
	        series1.add(new Month(4, 1997), 5353.971);
	        series1.add(new Month(5, 1997), 5344.961);
	        series1.add(new Month(6, 1997), 5376.151);
	        series1.add(new Month(7, 1997), 5373.231);
	        series1.add(new Month(8, 1997), 5404.420);
	        series1.add(new Month(9, 1997), 5413.146);
	        series1.add(new Month(10, 1997), 5427.225);
	        series1.add(new Month(11, 1997), 5462.622);
	        series1.add(new Month(12, 1997), 5502.388);
	        series1.add(new Month(1, 1998), 5490.064);
	        series1.add(new Month(2, 1998), 5520.668);
	        series1.add(new Month(3, 1998), 5542.426);
	        series1.add(new Month(4, 1998), 5499.895);
	        series1.add(new Month(5, 1998), 5506.356);
	        series1.add(new Month(6, 1998), 5547.935);
	        series1.add(new Month(7, 1998), 5527.738);
	        series1.add(new Month(8, 1998), 5564.553);
	        series1.add(new Month(9, 1998), 5526.193);
	        series1.add(new Month(10, 1998), 5559.255);
	        series1.add(new Month(11, 1998), 5591.979);
	        series1.add(new Month(12, 1998), 5614.217);
	        series1.add(new Month(1, 1999), 5610.117);
	        series1.add(new Month(2, 1999), 5621.946);
	        series1.add(new Month(3, 1999), 5651.615);
	        series1.add(new Month(4, 1999), 5585.840);
	        series1.add(new Month(5, 1999), 5604.198);
	        series1.add(new Month(6, 1999), 5638.780);
	        series1.add(new Month(7, 1999), 5638.656);
	        series1.add(new Month(8, 1999), 5672.386);
	        series1.add(new Month(9, 1999), 5656.271);
	        series1.add(new Month(10, 1999), 5679.727);
	        series1.add(new Month(11, 1999), 5693.600);
	        series1.add(new Month(12, 1999), 5776.091);
	        series1.add(new Month(1, 2000), 5711.285);
	        series1.add(new Month(2, 2000), 5735.333);
	        series1.add(new Month(3, 2000), 5773.392);
	        series1.add(new Month(4, 2000), 5685.108);
	        series1.add(new Month(5, 2000), 5647.170);
	        series1.add(new Month(6, 2000), 5685.938);
	        series1.add(new Month(7, 2000), 5658.807);
	        series1.add(new Month(8, 2000), 5677.822);
	        series1.add(new Month(9, 2000), 5674.178);
	        series1.add(new Month(10, 2000), 5657.328);
	        series1.add(new Month(11, 2000), 5709.699);
	        series1.add(new Month(12, 2000), 5662.216);
	        series1.add(new Month(1, 2001), 5716.071);
	        series1.add(new Month(2, 2001), 5735.859);
	        series1.add(new Month(3, 2001), 5773.740);
	        series1.add(new Month(4, 2001), 5661.348);
	        series1.add(new Month(5, 2001), 5656.182);
	        series1.add(new Month(6, 2001), 5726.815);
	        series1.add(new Month(7, 2001), 5718.303);
	        series1.add(new Month(8, 2001), 5769.876);
	        series1.add(new Month(9, 2001), 5807.463);
	        series1.add(new Month(10, 2001), 5815.983);
	        series1.add(new Month(11, 2001), 5888.897);
	        series1.add(new Month(12, 2001), 5943.439);
	        series1.add(new Month(1, 2002), 5937.229);
	        series1.add(new Month(2, 2002), 6003.453);
	        series1.add(new Month(3, 2002), 6006.032);
	        series1.add(new Month(4, 2002), 5984.677);
	        series1.add(new Month(5, 2002), 6019.332);
	        series1.add(new Month(6, 2002), 6126.469);
	        series1.add(new Month(7, 2002), 6159.741);
	        series1.add(new Month(8, 2002), 6210.482);
	        series1.add(new Month(9, 2002), 6228.236);
	        series1.add(new Month(10, 2002), 6282.528);
	        series1.add(new Month(11, 2002), 6343.460);
	        series1.add(new Month(12, 2002), 6405.707);
	        series1.add(new Month(1, 2003), 6401.377);
	        series1.add(new Month(2, 2003), 6445.790);
	        series1.add(new Month(3, 2003), 6460.776);
	        series1.add(new Month(4, 2003), 6460.381);
	        series1.add(new Month(5, 2003), 6558.147);
	        series1.add(new Month(6, 2003), 6670.121);
	        series1.add(new Month(7, 2003), 6751.195);
	        series1.add(new Month(8, 2003), 6790.041);
	        series1.add(new Month(9, 2003), 6783.231);
	        series1.add(new Month(10, 2003), 6872.676);
	        series1.add(new Month(11, 2003), 6925.065);
	        series1.add(new Month(12, 2003), 6997.964);
	        series1.add(new Month(1, 2004), 7009.235);
	        series1.add(new Month(2, 2004), 7091.943);
	        series1.add(new Month(3, 2004), 7131.068);
	        series1.add(new Month(4, 2004), 7133.789);
	        series1.add(new Month(5, 2004), 7196.383);
	        series1.add(new Month(6, 2004), 7274.335);
	        series1.add(new Month(7, 2004), 7316.568);
	        series1.add(new Month(8, 2004), 7350.950);
	        series1.add(new Month(9, 2004), 7379.053);
	        series1.add(new Month(10, 2004), 7429.677);
	        series1.add(new Month(11, 2004), 7525.210);
	        series1.add(new Month(12, 2004), 7596.144);
	        series1.add(new Month(1, 2005), 7627.743);
	        series1.add(new Month(2, 2005), 7713.138);
	        series1.add(new Month(3, 2005), 7776.939);
	        series1.add(new Month(4, 2005), 7764.537);
	        series1.add(new Month(5, 2005), 7777.880);
	        series1.add(new Month(6, 2005), 7836.496);
	        series1.add(new Month(7, 2005), 7887.618);
	        series1.add(new Month(8, 2005), 7926.933);
	        series1.add(new Month(9, 2005), 7932.710);
	        series1.add(new Month(10, 2005), 8027.123);
	        series1.add(new Month(11, 2005), 8092.322);
	        series1.add(new Month(12, 2005), 8170.414);
	        series1.add(new Month(1, 2006), 8196.070);
	        series1.add(new Month(2, 2006), 8269.886);
	        series1.add(new Month(3, 2006), 8371.156);
	        series1.add(new Month(4, 2006), 8355.718);
	        series1.add(new Month(5, 2006), 8356.777);
	        series1.add(new Month(6, 2006), 8420.042);
	        series1.add(new Month(7, 2006), 8444.347);
	        series1.add(new Month(8, 2006), 8515.034);
	        series1.add(new Month(9, 2006), 8506.974);
	        series1.add(new Month(10, 2006), 8584.329);
	        series1.add(new Month(11, 2006), 8633.246);
	        series1.add(new Month(12, 2006), 8680.224);
	        series1.add(new Month(1, 2007), 8707.561);
	        return new TimeSeriesCollection(series1);

	    }

	    /**
	     * Creates a sample dataset.  You wouldn't normally hard-code the
	     * population of a dataset in this way (it would be better to read the
	     * values from a file or a database query), but for a self-contained demo
	     * this is the least complicated solution.
	     *
	     * @return A sample dataset.
	     */
	    private static IntervalXYDataset createDataset2() {
	        TimeSeriesCollection dataset = new TimeSeriesCollection();

	        TimeSeries series1 = new TimeSeries("Change from previous year",
	                Month.class);
	        series1.add(new Month(1, 1990), 276.627);
	        series1.add(new Month(2, 1990), 271.509);
	        series1.add(new Month(3, 1990), 311.058);
	        series1.add(new Month(4, 1990), 304.345);
	        series1.add(new Month(5, 1990), 317.632);
	        series1.add(new Month(6, 1990), 343.831);
	        series1.add(new Month(7, 1990), 368.317);
	        series1.add(new Month(8, 1990), 375.266);
	        series1.add(new Month(9, 1990), 375.882);
	        series1.add(new Month(10, 1990), 373.731);
	        series1.add(new Month(11, 1990), 407.096);
	        series1.add(new Month(12, 1990), 411.826);
	        series1.add(new Month(1, 1991), 436.825);
	        series1.add(new Month(2, 1991), 464.283);
	        series1.add(new Month(3, 1991), 389.411);
	        series1.add(new Month(4, 1991), 384.046);
	        series1.add(new Month(5, 1991), 402.060);
	        series1.add(new Month(6, 1991), 394.234);
	        series1.add(new Month(7, 1991), 408.055);
	        series1.add(new Month(8, 1991), 402.708);
	        series1.add(new Month(9, 1991), 431.990);
	        series1.add(new Month(10, 1991), 442.156);
	        series1.add(new Month(11, 1991), 416.678);
	        series1.add(new Month(12, 1991), 436.878);
	        series1.add(new Month(1, 1992), 397.925);
	        series1.add(new Month(2, 1992), 370.422);
	        series1.add(new Month(3, 1992), 439.921);
	        series1.add(new Month(4, 1992), 446.915);
	        series1.add(new Month(5, 1992), 437.203);
	        series1.add(new Month(6, 1992), 446.668);
	        series1.add(new Month(7, 1992), 433.785);
	        series1.add(new Month(8, 1992), 434.539);
	        series1.add(new Month(9, 1992), 399.318);
	        series1.add(new Month(10, 1992), 350.223);
	        series1.add(new Month(11, 1992), 385.162);
	        series1.add(new Month(12, 1992), 375.311);
	        series1.add(new Month(1, 1993), 357.866);
	        series1.add(new Month(2, 1993), 367.945);
	        series1.add(new Month(3, 1993), 349.292);
	        series1.add(new Month(4, 1993), 362.110);
	        series1.add(new Month(5, 1993), 361.843);
	        series1.add(new Month(6, 1993), 367.294);
	        series1.add(new Month(7, 1993), 339.649);
	        series1.add(new Month(8, 1993), 354.375);
	        series1.add(new Month(9, 1993), 346.868);
	        series1.add(new Month(10, 1993), 355.182);
	        series1.add(new Month(11, 1993), 361.010);
	        series1.add(new Month(12, 1993), 358.678);
	        series1.add(new Month(1, 1994), 359.108);
	        series1.add(new Month(2, 1994), 362.537);
	        series1.add(new Month(3, 1994), 345.289);
	        series1.add(new Month(4, 1994), 314.620);
	        series1.add(new Month(5, 1994), 313.018);
	        series1.add(new Month(6, 1994), 293.852);
	        series1.add(new Month(7, 1994), 286.101);
	        series1.add(new Month(8, 1994), 288.678);
	        series1.add(new Month(9, 1994), 281.261);
	        series1.add(new Month(10, 1994), 311.656);
	        series1.add(new Month(11, 1994), 284.985);
	        series1.add(new Month(12, 1994), 264.463);
	        series1.add(new Month(1, 1995), 289.519);
	        series1.add(new Month(2, 1995), 294.757);
	        series1.add(new Month(3, 1995), 288.247);
	        series1.add(new Month(4, 1995), 283.623);
	        series1.add(new Month(5, 1995), 294.630);
	        series1.add(new Month(6, 1995), 305.570);
	        series1.add(new Month(7, 1995), 323.790);
	        series1.add(new Month(8, 1995), 278.765);
	        series1.add(new Month(9, 1995), 281.233);
	        series1.add(new Month(10, 1995), 251.095);
	        series1.add(new Month(11, 1995), 210.810);
	        series1.add(new Month(12, 1995), 188.515);
	        series1.add(new Month(1, 1996), 171.609);
	        series1.add(new Month(2, 1996), 162.743);
	        series1.add(new Month(3, 1996), 253.670);
	        series1.add(new Month(4, 1996), 249.722);
	        series1.add(new Month(5, 1996), 224.583);
	        series1.add(new Month(6, 1996), 209.704);
	        series1.add(new Month(7, 1996), 228.737);
	        series1.add(new Month(8, 1996), 237.547);
	        series1.add(new Month(9, 1996), 250.828);
	        series1.add(new Month(10, 1996), 262.058);
	        series1.add(new Month(11, 1996), 307.219);
	        series1.add(new Month(12, 1996), 334.507);
	        series1.add(new Month(1, 1997), 326.561);
	        series1.add(new Month(2, 1997), 332.896);
	        series1.add(new Month(3, 1997), 263.104);
	        series1.add(new Month(4, 1997), 251.922);
	        series1.add(new Month(5, 1997), 216.452);
	        series1.add(new Month(6, 1997), 215.075);
	        series1.add(new Month(7, 1997), 184.342);
	        series1.add(new Month(8, 1997), 196.117);
	        series1.add(new Month(9, 1997), 188.335);
	        series1.add(new Month(10, 1997), 179.905);
	        series1.add(new Month(11, 1997), 166.073);
	        series1.add(new Month(12, 1997), 179.216);
	        series1.add(new Month(1, 1998), 176.067);
	        series1.add(new Month(2, 1998), 170.731);
	        series1.add(new Month(3, 1998), 161.536);
	        series1.add(new Month(4, 1998), 145.924);
	        series1.add(new Month(5, 1998), 161.395);
	        series1.add(new Month(6, 1998), 171.784);
	        series1.add(new Month(7, 1998), 154.507);
	        series1.add(new Month(8, 1998), 160.133);
	        series1.add(new Month(9, 1998), 113.047);
	        series1.add(new Month(10, 1998), 132.030);
	        series1.add(new Month(11, 1998), 129.357);
	        series1.add(new Month(12, 1998), 111.829);
	        series1.add(new Month(1, 1999), 120.053);
	        series1.add(new Month(2, 1999), 101.278);
	        series1.add(new Month(3, 1999), 109.189);
	        series1.add(new Month(4, 1999), 85.945);
	        series1.add(new Month(5, 1999), 97.842);
	        series1.add(new Month(6, 1999), 90.845);
	        series1.add(new Month(7, 1999), 110.918);
	        series1.add(new Month(8, 1999), 107.833);
	        series1.add(new Month(9, 1999), 130.078);
	        series1.add(new Month(10, 1999), 120.472);
	        series1.add(new Month(11, 1999), 101.621);
	        series1.add(new Month(12, 1999), 161.874);
	        series1.add(new Month(1, 2000), 101.168);
	        series1.add(new Month(2, 2000), 113.387);
	        series1.add(new Month(3, 2000), 121.777);
	        series1.add(new Month(4, 2000), 99.268);
	        series1.add(new Month(5, 2000), 42.972);
	        series1.add(new Month(6, 2000), 47.158);
	        series1.add(new Month(7, 2000), 20.151);
	        series1.add(new Month(8, 2000), 5.436);
	        series1.add(new Month(9, 2000), 17.907);
	        series1.add(new Month(10, 2000), -22.399);
	        series1.add(new Month(11, 2000), 16.099);
	        series1.add(new Month(12, 2000), -113.875);
	        series1.add(new Month(1, 2001), 4.786);
	        series1.add(new Month(2, 2001), .526);
	        series1.add(new Month(3, 2001), .348);
	        series1.add(new Month(4, 2001), -23.760);
	        series1.add(new Month(5, 2001), 9.012);
	        series1.add(new Month(6, 2001), 40.877);
	        series1.add(new Month(7, 2001), 59.496);
	        series1.add(new Month(8, 2001), 92.054);
	        series1.add(new Month(9, 2001), 133.285);
	        series1.add(new Month(10, 2001), 158.655);
	        series1.add(new Month(11, 2001), 179.198);
	        series1.add(new Month(12, 2001), 281.223);
	        series1.add(new Month(1, 2002), 221.158);
	        series1.add(new Month(2, 2002), 267.594);
	        series1.add(new Month(3, 2002), 232.292);
	        series1.add(new Month(4, 2002), 323.329);
	        series1.add(new Month(5, 2002), 363.150);
	        series1.add(new Month(6, 2002), 399.654);
	        series1.add(new Month(7, 2002), 441.438);
	        series1.add(new Month(8, 2002), 440.606);
	        series1.add(new Month(9, 2002), 420.773);
	        series1.add(new Month(10, 2002), 466.545);
	        series1.add(new Month(11, 2002), 454.563);
	        series1.add(new Month(12, 2002), 462.268);
	        series1.add(new Month(1, 2003), 464.148);
	        series1.add(new Month(2, 2003), 442.337);
	        series1.add(new Month(3, 2003), 454.744);
	        series1.add(new Month(4, 2003), 475.704);
	        series1.add(new Month(5, 2003), 538.815);
	        series1.add(new Month(6, 2003), 543.652);
	        series1.add(new Month(7, 2003), 591.454);
	        series1.add(new Month(8, 2003), 579.559);
	        series1.add(new Month(9, 2003), 554.995);
	        series1.add(new Month(10, 2003), 590.148);
	        series1.add(new Month(11, 2003), 581.605);
	        series1.add(new Month(12, 2003), 592.257);
	        series1.add(new Month(1, 2004), 607.858);
	        series1.add(new Month(2, 2004), 646.153);
	        series1.add(new Month(3, 2004), 670.292);
	        series1.add(new Month(4, 2004), 673.408);
	        series1.add(new Month(5, 2004), 638.236);
	        series1.add(new Month(6, 2004), 604.214);
	        series1.add(new Month(7, 2004), 565.373);
	        series1.add(new Month(8, 2004), 560.909);
	        series1.add(new Month(9, 2004), 595.822);
	        series1.add(new Month(10, 2004), 557.001);
	        series1.add(new Month(11, 2004), 600.145);
	        series1.add(new Month(12, 2004), 598.180);
	        series1.add(new Month(1, 2005), 618.508);
	        series1.add(new Month(2, 2005), 621.195);
	        series1.add(new Month(3, 2005), 645.871);
	        series1.add(new Month(4, 2005), 630.748);
	        series1.add(new Month(5, 2005), 581.497);
	        series1.add(new Month(6, 2005), 562.161);
	        series1.add(new Month(7, 2005), 571.050);
	        series1.add(new Month(8, 2005), 575.983);
	        series1.add(new Month(9, 2005), 553.657);
	        series1.add(new Month(10, 2005), 597.446);
	        series1.add(new Month(11, 2005), 567.112);
	        series1.add(new Month(12, 2005), 574.270);
	        series1.add(new Month(1, 2006), 568.327);
	        series1.add(new Month(2, 2006), 556.748);
	        series1.add(new Month(3, 2006), 594.217);
	        series1.add(new Month(4, 2006), 591.181);
	        series1.add(new Month(5, 2006), 578.897);
	        series1.add(new Month(6, 2006), 583.546);
	        series1.add(new Month(7, 2006), 556.729);
	        series1.add(new Month(8, 2006), 588.101);
	        series1.add(new Month(9, 2006), 574.264);
	        series1.add(new Month(10, 2006), 557.206);
	        series1.add(new Month(11, 2006), 540.924);
	        series1.add(new Month(12, 2006), 509.810);
	        series1.add(new Month(1, 2007), 511.491);
	        dataset.addSeries(series1);
	        return dataset;

    }



    /**
     * Receives chart mouse click events.
     *
     * @param event  the event.
     */
    public void chartMouseClicked(ChartMouseEvent event) {
        int mouseX = event.getTrigger().getX();
        int mouseY = event.getTrigger().getY();
        System.out.println("x = " + mouseX + ", y = " + mouseY);
        Point2D point2D = this.chartPanel.translateScreenToJava2D(
                new Point(mouseX, mouseY));
/*
       int subplotIndex = getSubplotIndex(event);//n

       if (subplotIndex< 0)    // invalid subplot?
          return;

        XYPlot plot1 =  getSubplot(event);
        if(plot1==null){
			System.out.println("--------------plot is null");
	     }else{
			 System.out.println("--------------plot is NOT null");
	     }
*/
        //XYPlot plot = (XYPlot) this.chart.getPlot();
        CombinedDomainXYPlot plot = ( CombinedDomainXYPlot) chart.getXYPlot();//new
        		if( plot==null){
					System.out.println("plot is null");
				}else{
					System.out.println("plot is NOT null");
				}

        ChartRenderingInfo info = this.chartPanel.getChartRenderingInfo();
        		PlotRenderingInfo plotRenderingInfo = info.getPlotInfo();//new
				if(plotRenderingInfo==null){
					System.out.println("plotRenderingInfo is null");
				}else{
					System.out.println("plotRenderingInfo is NOT null");
				}


        		int index = info.getPlotInfo().getSubplotIndex(point2D);//new
				System.out.println("index is " + index);
				Rectangle2D dataArea = info.getPlotInfo().getSubplotInfo(index).getDataArea();//
				if(dataArea==null){
					System.out.println("dataArea is null");
				}else{
					System.out.println("dataArea is NOT null");
				}

       // Rectangle2D dataArea = info.getPlotInfo().getDataArea();

       		XYPlot subplot = (XYPlot)plot.findSubplot(plotRenderingInfo,point2D);//new
	   		if(subplot==null){
	   			System.out.println("subplot is null");
	   		}else{
	   			System.out.println("subplot is NOT null");
	   		}

	   	//////////
	   		XYPlot plot2 =(XYPlot) ((CombinedDomainXYPlot) chart.getXYPlot()).getSubplots().get(0);//new
	   	//from another forum query
	   	double   y2=plot2.getRangeAxis().java2DToValue(point2D.getY(),info.getPlotInfo().getSubplotInfo(0).getDataArea(),RectangleEdge.RIGHT);
	   	      double   x2=plot2.getDomainAxis().java2DToValue(point2D.getX(),info.getPlotInfo().getSubplotInfo(0).getDataArea(),RectangleEdge.BOTTOM);
	   	      System.out.println("x2 "+x2+"  y2 "+y2);
	     /////////

/*
        ValueAxis domainAxis = plot.getDomainAxis();
        RectangleEdge domainAxisEdge = plot.getDomainAxisEdge();
        ValueAxis rangeAxis = plot.getRangeAxis();
        RectangleEdge rangeAxisEdge = plot.getRangeAxisEdge();
        System.out.println("--------------1");

        double chartX = domainAxis.java2DToValue(p.getX(), dataArea,
                domainAxisEdge);
         System.out.println("--------------2");

        double chartY = rangeAxis.java2DToValue(p.getY(), dataArea,
                rangeAxisEdge);
          System.out.println("--------------3");
        System.out.println("Chart: x = " + chartX + ", y = " + chartY);
   */

   		ValueAxis domainAxis = subplot.getDomainAxis();
   		RectangleEdge domainAxisEdge = subplot.getDomainAxisEdge();

   		ValueAxis rangeAxis = subplot.getRangeAxis();//
   		if(rangeAxis==null){
   			System.out.println("rangeAxis is null");
   		}else{
   			System.out.println("rangeAxis is NOT null");
   		}
   		RectangleEdge rangeAxisEdge = subplot.getRangeAxisEdge();//
   		if(rangeAxisEdge==null){
   			System.out.println("rangeAxisEdge is null");
   		}else{
   			System.out.println("rangeAxisEdge is NOT null");
   		}

   		System.out.println("===============================================");
   		try{

   		if (count == 0) {
   			firstChartX = domainAxis.java2DToValue(point2D.getX(), dataArea,
   					domainAxisEdge);
   			firstChartY = rangeAxis.java2DToValue(point2D.getY(), dataArea,
   					rangeAxisEdge);
   			// Rectangle2D panelArea = chartPanel.getScreenDataArea(mouseX,mouseY);
   			// firstChartY = subplot.getRangeAxis().java2DToValue(mouseY, panelArea, subplot.getRangeAxisEdge());
   			System.out.println("1 Chart: x = " + firstChartX + ", y = " +
   			firstChartY);


   			count = 1;
   		} else if (count == 1) {
   			secondChartX = domainAxis.java2DToValue(point2D.getX(), dataArea,
   					domainAxisEdge);
   			secondChartY = rangeAxis.java2DToValue(point2D.getY(), dataArea,
   					rangeAxisEdge);
   			// Rectangle2D panelArea = chartPanel.getScreenDataArea(mouseX,mouseY);
   			 //firstChartY = subplot.getRangeAxis().java2DToValue(mouseY, panelArea, subplot.getRangeAxisEdge());

   			System.out.println("2 Chart: x = " + secondChartX + ", y = " +
   					secondChartY);

   			xYLineAnnotation = new XYLineAnnotation(firstChartX, firstChartY,
   					secondChartX, secondChartY, new BasicStroke(1.5f),
   					Color.black);
   			plot.addAnnotation(xYLineAnnotation);
   			count = 0;
   		}//end else if
   		}//end try
   		catch(Exception ee){
   			System.out.println("problem with line");
   			ee.printStackTrace();
		}//end catch

    }

    /**
     * Receives chart mouse moved events.
     *
     * @param event  the event.
     */
    public void chartMouseMoved(ChartMouseEvent event) {
        // ignore
    }

    /**
     * Starting point for the demonstration application.
     *
     * @param args  ignored.
     */
    public static void main(String[] args) {
        MouseListenerDemo4Plot demo = new MouseListenerDemo4Plot(
            "Mouse Listener Demo 4 Plot");
        demo.pack();
        RefineryUtilities.centerFrameOnScreen(demo);
        demo.setVisible(true);
    }





}

Posted: Wed Jun 27, 2007 1:38 pm
by skunk
Individual subplots of a CombinedDomainXYPlot do not have a domain axis, instead they share the domain axis of the combined plot. Try replacing

Code: Select all

x2=plot2.getDomainAxis().java2DToValue(...)
where plot2 is your subplot
with

Code: Select all

x2=plot.getDomainAxis().java2DToValue(
where plot is your combined plot

Posted: Wed Jun 27, 2007 1:48 pm
by develop
actually you are trying to add annotation to mainPlot. which is not correct for combined charts.

you have to add annotations to the subplot on which user have clicked.

so in your example.

if you replace following line

plot.addAnnotation(xYLineAnnotation); (original line - around 741)

with this line

subplot.addAnnotation(xYLineAnnotation); (new line - if notice plot is changed to sublot)

then click once on chart and click again on chart and you will see line.

actually there is better way to do this, if you want user to see while he is dragging his mouse, you have to implement mouseMoved and mouseReleased, and add annotations on mouseReleased.

Hope this helps,

Posted: Wed Jun 27, 2007 4:10 pm
by lia
Thank you Skunk and Develop your suggestions made the difference. You rock!!!