i am using mousewheel event handler which is newly inserted in jfree chart , but i have a problem with it ? its not working when i am running in eclipse viewpart can any one tell me how to run in eclipse?
this is my code..,
Code: Select all
package org.ancit.result.ui.view;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import javax.security.auth.Refreshable;
import javax.swing.JCheckBox;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.Timer;
import org.ancit.result.ui.view.TestDynChart.DataGenerator;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.swt.SWT;
import org.eclipse.swt.awt.SWT_AWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.ISelectionListener;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.actions.ActionFactory;
import org.eclipse.ui.part.ViewPart;
import org.jfree.chart.ChartFactory;
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.event.ChartProgressEvent;
import org.jfree.chart.event.ChartProgressListener;
import org.jfree.chart.labels.XYToolTipGenerator;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.StandardXYItemRenderer;
import org.jfree.chart.renderer.xy.XYItemRenderer;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.data.time.Month;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;
import org.jfree.data.time.TimeSeriesDataItem;
import org.jfree.data.time.Year;
import org.jfree.data.xy.XYDataset;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
import org.jfree.ui.RectangleInsets;
import ResultModel.Department;
import ResultModel.Facility;
import ResultModel.RootUniversity;
import ResultModel.Student;
import ResultModel.impl.RootUniversityImpl;
import ResultModel.impl.StudentImpl;
public class GraphView2 extends ViewPart implements ISelectionListener , ActionListener {
private Object student;
private Composite graphComposite;
private Object frame1;
private String selStu;
private Frame chartFrame;
private boolean firstTime;
private ChartPanel chartPanel;
public GraphView2() {
firstTime = true;
}
/*this alos added by me */
class DataGenerator extends Timer implements ActionListener, ChartProgressListener {
private Random random = new Random();
private XYSeriesCollection dataset;
private double x;
private Object chartPanel;
private XYSeries series;
private static final double inc = 0.05;
/**
* Constructor.
*
* @param interval the interval (in milliseconds)
*/
DataGenerator(int interval, XYSeriesCollection dataset) {
super(interval, null);
addActionListener(this);
this.dataset = dataset;
}
/**
* Adds a new free/total memory reading to the dataset.
*
* @param event the action event.
*/
public void actionPerformed(ActionEvent event) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
/*if (!chartComposite.isDisposed())*/{
final int count = 25;
// Points for dirty area bounding rectangle.
List<Point2D> ptsBounds = new ArrayList<Point2D>();
// Series.
List<XYSeries> seriesList = dataset.getSeries();
// Insert last points.
for (XYSeries series : seriesList) {
if (!series.isEmpty()) {
ptsBounds.add(new Point2D.Double(series.getX(series.getItemCount() - 1).doubleValue(), series.getY(
series.getItemCount() - 1).doubleValue()));
}
}
// Add points to series and set "notify" flag to false. The event will be sent explicitly for the dataset.
for (int i = 0; i < count; ++i) {
double xCurr = x + i * (inc / count);
for (int seriesIndex = 0; seriesIndex < seriesList.size(); ++seriesIndex) {
XYSeries series = seriesList.get(seriesIndex);
Point2D.Double pt = new Point2D.Double();
pt.x = xCurr;
switch (seriesIndex % 6) {
case 0:
pt.y = Math.sin(xCurr);
break;
case 1:
pt.y = (xCurr);
break;
case 2:
pt.y = Math.sin(2 * xCurr);
break;
case 3:
pt.y = Math.cos(2 * xCurr);
break;
case 4:
pt.y = Math.cos(3* xCurr);
break;
case 5:
pt.y = Math.sin(2 * xCurr);
break;
case 6:
pt.y = Math.cos(2 * xCurr);
break;
}
series.add(pt.x, pt.y, false);
ptsBounds.add(pt);
}
}
// Create bounding rectangle which defines the dirty area for redrawing.
if (!ptsBounds.isEmpty()) {
Point2D firstPt = ptsBounds.get(0);
Rectangle2D bounds = new Rectangle2D.Double(firstPt.getX(), firstPt.getY(), 0, 0);
for (int i = 1; i < ptsBounds.size(); ++i) {
Point2D pt = ptsBounds.get(i);
bounds.add(pt);
}
// Dataset event with the dirty rectangle.
dataset.fireDatasetChanged(bounds);
}
x += inc;
if(x>100) x=0;
}
}
});
}
public void chartProgress(ChartProgressEvent event) {
// TODO Auto-generated method stub
System.out.println("y");
if (event.getType() != ChartProgressEvent.DRAWING_FINISHED) {
return;
}
if (this.chartPanel != null) {
JFreeChart c = ((ChartPanel) this.chartPanel).getChart();
if (c != null) {
XYPlot plot = (XYPlot) c.getPlot();
XYDataset dataset = plot.getDataset();
Comparable seriesKey = dataset.getSeriesKey(0);
double xx = plot.getDomainCrosshairValue();
// update the table...
long millis = (long) xx;
TimeSeriesDataItem item = null;
//long x =item.getValue().doubleValue();
double y = item.getValue().doubleValue();
System.out.println(y);
System.out.println(xx);
}
}
}
}
/*till this end*/
@Override
public void createPartControl(Composite parent) {
parent.setLayout(new org.eclipse.swt.layout.GridLayout());
graphComposite = new Composite(parent, SWT.EMBEDDED | SWT.BORDER);
GridData gd = new GridData(GridData.FILL, GridData.FILL, true, true);
graphComposite.setLayoutData(gd);
JFreeChart chart = createDynamicChart();
displayBlankPanel();
displayChart(chart, 1);
this.getSite().getPage().addSelectionListener(
"org.ancit.result.ui.view.OrganizationView", this);
//ActionFactory.REFRESH.getId();
}
@Override
public void setFocus() {
// TODO Auto-generated method stub
}
public void selectionChanged(IWorkbenchPart part, ISelection selection) {
// TODO Auto-generated method stub
student = ((IStructuredSelection) selection).getFirstElement();
System.out.println(student.toString());
if (student instanceof RootUniversity) {
} else if (student instanceof Facility) {
System.out.println("");
} else if (student instanceof Department) {
System.out.println("");
} else if (student instanceof Year) {
System.out.println("");
} else if (student instanceof Student) {
selStu=((Student) student).getStuName();
System.out.println(selStu);
JFreeChart chart = createDynamicChart();
displayBlankPanel();
displayChart(chart, 1);
}
}
private void displayBlankPanel() {
// chartFrame = SWT_AWT.new_Frame(trial);
if(chartFrame != null)
{
chartFrame.dispose();
firstTime = true;
}
}
/**
* Common method that displays the chart
* if no chart is present then a blank panel is put
*@param jfreechart - The JFreeChart to display
*/
private void displayChart(JFreeChart jfreechart, int graphArrangement) {
// Create a SWT Frame and set it onto the composite
if (jfreechart != null) {
if (firstTime) {
chartFrame = SWT_AWT.new_Frame(graphComposite);
// set the layout of our frame to a GridLayout so the chart will
// automatically fill the entire area
chartFrame.setLayout(new BorderLayout());
firstTime = false;
chartPanel = new ChartPanel(jfreechart);
JPanel boxPanel = new JPanel();
JCheckBox box1 = new JCheckBox("Series 1");
box1.setActionCommand("S1");
box1.addActionListener(this);
box1.setSelected(true);
JCheckBox box2 = new JCheckBox("Series 2");
box2.setActionCommand("S2");
box2.addActionListener(this);
box2.setSelected(true);
JCheckBox box3 = new JCheckBox("Series 3");
box3.setActionCommand("S3");
box3.addActionListener(this);
box3.setSelected(true);
boxPanel.add(box1);
boxPanel.add(box2);
boxPanel.add(box3);
chartFrame.add(boxPanel, BorderLayout.SOUTH);
chartFrame.add(chartPanel);
} else {
chartPanel = new ChartPanel(jfreechart);
chartPanel.setMouseWheelEnabled(true);
chartFrame.add(chartPanel);
}
} else {
displayBlankPanel();
}
}
private DataGenerator dataGenerator;
private XYItemRenderer renderer;
private JFreeChart createDynamicChart() {
XYSeriesCollection dataset = new XYSeriesCollection();
XYSeries series1 = new XYSeries("Dyn1");
dataset.addSeries(series1);
XYSeries series2 = new XYSeries("Dyn2");
dataset.addSeries(series2);
XYSeries series3 = new XYSeries("Dyn3");
dataset.addSeries(series3);
XYSeries series4 = new XYSeries("Dyn4");
dataset.addSeries(series4);
XYSeries series5 = new XYSeries("Dyn5");
dataset.addSeries(series5);
dataGenerator = new DataGenerator(250, dataset);
JFreeChart chart = ChartFactory.createXYLineChart("Function test", "X", "Y", null, PlotOrientation.VERTICAL, true, true, false);
chart.getXYPlot().setDataset(0, dataset);
XYLineAndShapeRenderer renderer0 = new XYLineAndShapeRenderer(true, false);
renderer0.setDrawSeriesLineAsPath(true);
renderer0.setBaseToolTipGenerator(null);
chart.getXYPlot().setRenderer(0, renderer0);
NumberAxis xAxis1 = new NumberAxis("X");
xAxis1.setRange(0.0, 100.0);
xAxis1.setAutoRange(false);
NumberAxis yAxis1 = new NumberAxis("Y");
yAxis1.setRange(-4.0, 4.0);
yAxis1.setAutoRange(false);
chart.getXYPlot().setDomainAxis(0, xAxis1);
chart.getXYPlot().setRangeAxis(0, yAxis1);
chart.getXYPlot().mapDatasetToDomainAxis(0, 0);
chart.getXYPlot().mapDatasetToRangeAxis(0, 0);
this.renderer = chart.getXYPlot().getRenderer();
chartPanel = new ChartPanel(chart);
//chartpanel.setMouseWheelEnabled(true);
chart.getXYPlot().setDomainCrosshairVisible(true);
double xx = chart.getXYPlot().getDomainCrosshairValue();
System.out.println(xx);
// No axis offset.
chart.getXYPlot().setAxisOffset(RectangleInsets.ZERO_INSETS);
this.renderer = chart.getXYPlot().getRenderer();
dataGenerator.start();
return chart;
}
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
System.out.println("tgsd g dh dh fh fh");
int series = -1;
if (e.getActionCommand().equals("S1")) {
series = 0;
System.out.println(e.getActionCommand());
}
else if (e.getActionCommand().equals("S2")) {
series = 1;
}
else if (e.getActionCommand().equals("S3")) {
series = 2;
}
if (series >= 0) {
boolean visible = this.renderer.getItemVisible(series, 0);
this.renderer.setSeriesVisible(series, new Boolean(!visible));
}
}
}