Apache Wicket > Framework Documentation > Reference library > Integration guides > JFreeChart and wicket example
Added by Mathias Axelsson, last edited by Mathias Axelsson on Aug 14, 2007  (view change)

This page shows an example of how to use JFreeChart with wicket.

PieChartExamplePage.html

<html>
<body>
<img wicket:id="image">
</body>
</html>

PieChartExamplePage.java

import org.apache.wicket.markup.html.WebPage;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.data.general.DefaultPieDataset;

public class PieChartExamplePage extends WebPage {

	public PieChartExamplePage() {
		DefaultPieDataset d = new DefaultPieDataset();
		d.setValue("JavaWorld", new Integer(75));
		d.setValue("Other", new Integer(25));
		JFreeChart chart = ChartFactory.createPieChart("Sample Pie Chart", d,
                 true,		// Show legend  
                 true,		// Show tooltips
                 true);		// Show urls
        //chart.setBackgroundPaint(Color.white);
        //chart.setBorderVisible(false);
		add(new JFreeChartImage("image", chart, 300, 300));
	}

}

JFreeChartImage.java

import java.io.ByteArrayOutputStream;
import java.io.IOException;

import org.apache.wicket.Resource;
import org.apache.wicket.markup.html.image.Image;
import org.apache.wicket.markup.html.image.resource.DynamicImageResource;
import org.apache.wicket.model.Model;
import org.apache.wicket.protocol.http.WebResponse;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;

public class JFreeChartImage extends Image {
	
    private int width;
    private int height;

	public JFreeChartImage(String id, JFreeChart chart, int width, int height){
		super(id, new Model(chart));
		this.width = width;
		this.height = height;
	}

	@Override
    protected Resource getImageResource() {
        return new DynamicImageResource(){
			@Override
			protected byte[] getImageData() {
		        JFreeChart chart = (JFreeChart)getModelObject();
		        return toImageData(chart.createBufferedImage(width, height));
			}

			@Override
		    protected void setHeaders(WebResponse response) {
		        if (isCacheable()) {
		            super.setHeaders(response);
		        } else {
		            response.setHeader("Pragma", "no-cache");
		            response.setHeader("Cache-Control", "no-cache");
		            response.setDateHeader("Expires", 0);
		        }
		    }
        };
    }

}