did any one used mouse wheel ?

A discussion forum for JFreeChart (a 2D chart library for the Java platform).
Locked
anirudhak
Posts: 15
Joined: Thu Apr 30, 2009 11:06 am

did any one used mouse wheel ?

Post by anirudhak » Wed May 06, 2009 8:03 am

hi,

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));
        }
	}	
	
	


}

david.gilbert
JFreeChart Project Leader
Posts: 11734
Joined: Fri Mar 14, 2003 10:29 am
antibot: No, of course not.
Contact:

Re: did any one used mouse wheel ?

Post by david.gilbert » Thu May 07, 2009 7:49 am

I don't know enough about SWT to say whether or not the mouse wheel support can be wired up to work. It has been implemented in the ChartPanel class for use in Swing.
David Gilbert
JFreeChart Project Leader

:idea: Read my blog
:idea: Support JFree via the Github sponsorship program

anirudhak
Posts: 15
Joined: Thu Apr 30, 2009 11:06 am

Re: did any one used mouse wheel ?

Post by anirudhak » Thu May 07, 2009 9:56 am

thanks for ur reply..,
its working in jpanel..,
is it possible to set mouse up and mouse down in chartpanel . i want to click and move the chart ., so i want to know weather it works or not

if possible can u tell me where to modify the code..

Thanks ...,
anirudh.k

Locked