by Lars Vogel

Follow me on twitter

Lars Vogel on Google+

JFreeChart in Eclipse RCP - Tutorial

Lars Vogel

Version 1.1

04.12.2011

Revision History
Revision 0.1-0.4 12.10.2007 Lars
Vogel
Created
Revision 0.5 - 1.1. 01.01.2009 - 04.12.2011 Lars
Vogel
bug fixes and enhancements

Eclipse JFreeChart

This article describes the usage of JFreeChart within an Eclipse Rich Client Platform (RCP) application. It will use the JFreeChart SWT implementation and it based on Eclipse 3.7 (Indigo) and JFreeChart 1.0.13 but should also work with later version.


Table of Contents

1. Overview
2. Download JFreeChart
3. Creating Pie Charts with JFreeChart
3.1. Create Project
3.2. Create plugin project based on jars
3.3. Add the plugin dependency
3.4. Create view with pie chart
3.5. Run the application
4. Creating Bar Charts with JFreeChart
5. Thank you
6. Questions and Discussion
7. Links and Literature
7.1. Source Code
7.2. JFreeChart Links
7.3. vogella Resources

1. Overview

JFreeChart is a free 100% Java chart library created by David Gilbert. JFreeChart makes it easy for developers to display professional quality charts in their applications. This article assumes that you have knowledge in Eclipse RCP.

If you want to use use JFreeChart in Swing have a look at the JFreeChart Tutorial.

2. Download JFreeChart

Download the JFreeChart distribution (jars) from the website JFreeChart Homepage .

For the required Eclipse download please see Eclipse RCP

3. Creating Pie Charts with JFreeChart

3.1. Create Project

Create a new RCP project "de.vogella.rcp.jfreechart.pie" using "RCP application with a view" as a template. .

3.2. Create plugin project based on jars

Create a Plugin project "de.vogella.rcp.jfreechart.libs" for the following JFreeChart jars. Please replace the version numbers with the version you are using. How to create a new plugin project for jars is described in Create a plugin project for your jar for details).

  • jcommon-1.0.16.jar

  • jfreechart-1.0.13.jar

  • jfreechart-1.0.13-experimental.jar

  • jfreechart-1.0.13-swt.jar

  • swtgraphics2d.jar

3.3. Add the plugin dependency

JFreeChart is using SWT therefore you need to add the dependency to SWT to the project. In project "de.vogella.rcp.jfreechart.libs" select the MANIFEST.MF and the tab "Dependencies". Press "Add" and select org.eclipse.swt as the same jars to your runtime environment.

Add "de.vogella.jfreechart.libs" as a dependency to project "de.vogella.rcp.jfreechart.pie". Select the file MANIFEST.MF and the tab "Dependencies". Add "de.vogella.rcp.jfreechart.libs" as a dependency.

3.4. Create view with pie chart

Change the coding of the view to the following:

				
package de.vogella.rcp.jfreechart.pie;

import java.awt.Font;

import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.part.ViewPart;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PiePlot;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.data.general.PieDataset;
import org.jfree.experimental.chart.swt.ChartComposite;

public class View extends ViewPart {

	public void createPartControl(Composite parent) {
		JFreeChart chart = createChart(createDataset());
		new ChartComposite(parent, SWT.NONE,
				chart, true);
	}

	public void setFocus() {
	}

	
/** * Creates the Dataset for the Pie chart */
private PieDataset createDataset() { DefaultPieDataset dataset = new DefaultPieDataset(); dataset.setValue("One", new Double(43.2)); dataset.setValue("Two", new Double(10.0)); dataset.setValue("Three", new Double(27.5)); dataset.setValue("Four", new Double(17.5)); dataset.setValue("Five", new Double(11.0)); dataset.setValue("Six", new Double(19.4)); return dataset; }
/** * Creates the Chart based on a dataset */
private JFreeChart createChart(PieDataset dataset) { JFreeChart chart = ChartFactory.createPieChart("Pie Chart Demo 1", // chart // title dataset, // data true, // include legend true, false); PiePlot plot = (PiePlot) chart.getPlot(); plot.setSectionOutlinesVisible(false); plot.setLabelFont(new Font("SansSerif", Font.PLAIN, 12)); plot.setNoDataMessage("No data available"); plot.setCircular(false); plot.setLabelGap(0.02); return chart; } }

3.5. Run the application

Launch your application. The result should look like the following.

4. Creating Bar Charts with JFreeChart

Create a new Plugin project "de.vogella.rcp.jfreechart.barchart" using "RCP application with a view" as a template. Add "de.vogella.rcp.jfreechart.libs" as a dependency to project "de.vogella.jfreechart.barchart" and change the coding of the view to the following:

			
package de.vogella.rcp.jfreechart.barchart;

import java.awt.Color;

import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.part.ViewPart;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.experimental.chart.swt.ChartComposite;

public class View extends ViewPart {

	private CategoryDataset createDataset() {
		DefaultCategoryDataset dataset = new DefaultCategoryDataset();

		// row keys...
		String series1 = "First";
		String series2 = "Second";

		// column keys...
		String category1 = "Label 1";
		String category2 = "Label 2";
		String category3 = "Label  3";

		dataset.addValue(1.0, series1, category1);
		dataset.addValue(4.0, series1, category2);
		dataset.addValue(3.0, series1, category3);

		dataset.addValue(5.0, series2, category1);
		dataset.addValue(7.0, series2, category2);
		dataset.addValue(6.0, series2, category3);

		return dataset;
	}

	
/** * Creates a chart. * * @param dataset * dataset. * * @return A chart. */
private JFreeChart createChart(CategoryDataset dataset) { JFreeChart chart = ChartFactory.createBarChart("Bar Chart", // chart // title "Labels", // domain axis label "Values", // range axis label dataset, // data PlotOrientation.VERTICAL, // orientation true, // include legend true, // tooltips? false // URLs? ); CategoryPlot plot = (CategoryPlot) chart.getPlot(); plot.setBackgroundPaint(Color.lightGray); plot.setDomainGridlinePaint(Color.white); plot.setDomainGridlinesVisible(true); plot.setRangeGridlinePaint(Color.white); return chart; } public void createPartControl(Composite parent) { JFreeChart chart = createChart(createDataset()); final ChartComposite frame = new ChartComposite(parent, SWT.NONE, chart, true); } public void setFocus() { } }

Run it and see that it is working.

5. Thank you

Please help me to support this article:

Flattr this

6. Questions and Discussion

Before posting questions, please see the vogella FAQ. If you have questions or find an error in this article please use the www.vogella.de Google Group. I have created a short list how to create good questions which might also help you.

7. Links and Literature

7.1. Source Code

Source Code of Examples

7.2. JFreeChart Links

JFreeChart Homepage

7.3. vogella Resources

Eclipse RCP Training (German) Eclipse RCP Training with Lars Vogel

Android Tutorial Introduction to Android Programming

GWT Tutorial Program in Java and compile to JavaScript and HTML

Eclipse RCP Tutorial Create native applications in Java

JUnit Tutorial Test your application

Git Tutorial Put everything you have under distributed version control system