Zooming on mouse click

A discussion forum for JFreeChart (a 2D chart library for the Java platform).
Locked
anwar
Posts: 1
Joined: Fri Aug 06, 2010 5:25 am
antibot: No, of course not.

Zooming on mouse click

Post by anwar » Fri Aug 06, 2010 5:42 am

Hi ....
I am drawing line chart , and my requirement is that when i click on particular position in chart ,
that point should be zoom out , can anybody provide me a code,,,,,
Here is my code..
Thanx in advance........


package reports;

import java.awt.Dimension;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.geom.Rectangle2D;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
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.RefineryUtilities;

@SuppressWarnings("serial")
public class XYChartAssignment extends ApplicationFrame implements MouseListener{

XYPlot plot;
ChartPanel chartPanel;

public XYChartAssignment(String title) {
super(title);
// TODO Auto-generated constructor stub
XYDataset dataset = createDataset();
JFreeChart chart = createChart(dataset);
chartPanel = new ChartPanel(chart);

//for zooming.......
chartPanel.setMouseWheelEnabled(true);
chartPanel.setFillZoomRectangle(true);
// chartPanel.setMouseZoomable(true);
// chartPanel.setZoomAroundAnchor(true);

chartPanel.setPreferredSize(new Dimension(1300,500));
chartPanel.addMouseListener(this);

setContentPane(chartPanel);

}

private JFreeChart createChart(XYDataset dataset) {
// TODO Auto-generated method stub
JFreeChart chart = ChartFactory.createXYLineChart("Line chart assignment",
"x axis", "Y axis", dataset, PlotOrientation.VERTICAL, true,true, false);

plot = chart.getXYPlot();
plot.setDomainMinorGridlinesVisible(true);

plot.setRangeMinorGridlinesVisible(true);
plot.setDomainPannable(true);
plot.setRangePannable(true);
ValueAxis xaxis = plot.getDomainAxis();

ValueAxis yaxis = plot.getRangeAxis();
yaxis.setUpperBound(20);

return chart;
}

private XYDataset createDataset() {
// TODO Auto-generated method stub
XYSeries xySeries = new XYSeries("Line chart assignment");

xySeries.add(60, 10);
xySeries.add(84, 10.5);
xySeries.add(99, 11);
xySeries.add(110, 11.3);
xySeries.add(130, 11.6);
xySeries.add(170, 11.9);
xySeries.add(230, 11);
xySeries.add(290, 12.5);
xySeries.add(330, 12);
xySeries.add(400, 11.7);
xySeries.add(460, 11.2);
xySeries.add(500, 10.8);
xySeries.add(530, 10.5);
xySeries.add(600, 10.1);
xySeries.add(630, 9.8);
xySeries.add(670, 9.5);
xySeries.add(700, 9.5);
xySeries.add(730, 9.7);
xySeries.add(760, 10);
xySeries.add(800, 10.3);
xySeries.add(830, 10.5);
xySeries.add(860, 10.7);
xySeries.add(900, 11);
xySeries.add(930, 11.2);
xySeries.add(960, 11.5);
xySeries.add(1000, 11.7);
xySeries.add(1030, 12);
xySeries.add(1060, 12.3);
xySeries.add(1090, 12.5);
xySeries.add(1100, 12.7);
xySeries.add(1130, 13);
xySeries.add(1160, 12.8);
xySeries.add(1190, 12.6);
xySeries.add(1230, 12.3);
xySeries.add(1260, 12);
xySeries.add(1290, 11.8);
xySeries.add(1330, 11.5);
xySeries.add(1360, 11.3);
xySeries.add(1390, 11.2);
xySeries.add(1420, 11);
xySeries.add(1450, 10.8);
xySeries.add(1470, 10.7);
xySeries.add(1500, 10.4);
xySeries.add(1530, 9.8);
xySeries.add(1560, 9.6);
xySeries.add(1590, 9.4);
xySeries.add(1620, 9.3);
xySeries.add(1650, 9);
xySeries.add(1670, 9.2);
xySeries.add(1700, 9.4);
xySeries.add(1730, 9.6);
xySeries.add(1760, 9.8);
xySeries.add(1790, 9.8);
xySeries.add(1800, 9.9);
xySeries.add(1830, 10.2);
xySeries.add(1860, 10.5);
xySeries.add(1890, 10.8);
xySeries.add(1910, 11);
xySeries.add(1930, 11.3);
xySeries.add(1960, 11.6);
xySeries.add(1990, 11.9);

XYDataset dataset = new XYSeriesCollection(xySeries);


return dataset;
}

public static void main(String []s){

XYChartAssignment demo = new XYChartAssignment("assignment");
demo.pack();
RefineryUtilities.centerFrameOnScreen(demo);
demo.setVisible(true);

}


@Override
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub

}

@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub

}

@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub

}

@Override
public void mousePressed(MouseEvent e) {
Rectangle2D rectangle2d=chartPanel.getScreenDataArea();
System.out.println(rectangle2d.getX());
System.out.println(rectangle2d.getY());
}


@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub

}
}

pooo
Posts: 9
Joined: Tue Jul 13, 2010 2:04 pm
antibot: No, of course not.

Re: Zooming on mouse click

Post by pooo » Fri Aug 06, 2010 1:13 pm

I am not sure whether you want to zoom in or out, but this should help you :

Code: Select all

@Override
public void mousePressed(MouseEvent e) {
chartPanel.zoomOutBoth(e.getX(), e.getY());
//Or chartPanel.zoomInBoth(e.getX(), e.getY()); if you want to zoom in
}

Locked