DUE TO SPAM, SIGN-UP IS DISABLED. Goto Selfserve wiki signup and request an account.
Based on the Tapestry5HowToCreateASimpleGraphComponent this is how you can create a component that can be passed a JFreeChart object to allow you to create any kind of chart
To use add this to your page:
<t:chart width="200" height="150" chart="lineChart"/>
add this to your page class:
public JFreeChart getLineChart() {
XYSeries series = new XYSeries("Average Size");
series.add(20.0, 10.0);
series.add(40.0, 20.0);
series.add(70.0, 50.0);
XYDataset xyDataset = new XYSeriesCollection(series);
final JFreeChart chart = ChartFactory.createXYLineChart
("Sample XY Chart", // Title
"Height", // X-Axis label
"Weight", // Y-Axis label
xyDataset, // Dataset
PlotOrientation.HORIZONTAL,
true, // Show legend
true, // Tooltips
true // Urls
);
return chart;
}
add this to your pom.xml under "dependencies":
<dependency>
<groupId>jfree</groupId>
<artifactId>jfreechart</artifactId>
<version>1.0.5</version>
</dependency>
Source:
(put this component class into yourApp.components package)
package com.liftyourgame.application.components;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import org.apache.tapestry5.ComponentResources;
import org.apache.tapestry5.Link;
import org.apache.tapestry5.MarkupWriter;
import org.apache.tapestry5.StreamResponse;
import org.apache.tapestry5.annotations.Parameter;
import org.apache.tapestry5.annotations.Persist;
import org.apache.tapestry5.dom.Element;
import org.apache.tapestry5.ioc.annotations.Inject;
import org.apache.tapestry5.ioc.services.TypeCoercer;
import org.apache.tapestry5.services.Response;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
public class Chart {
@Inject
private ComponentResources _resources;
@Inject
private TypeCoercer _coercer;
/**list(array) of paired values(label & value): [String,Number,String,Number,...]*/
@Parameter(required=true)
private JFreeChart _chart;
@Persist
private JFreeChart _context;
@Parameter(required=true)
private int _width;
@Parameter(required=true)
private int _height;
void beginRender(MarkupWriter writer)
{
_context=_chart;
Object[] params = { new Integer(_width),
new Integer(_height) };
//generate action link
Link link = _resources.createEventLink("chart", params);
Element img = writer.element("img", "src", link);
_resources.renderInformalParameters(writer);
}
void afterRender(MarkupWriter writer)
{
writer.end();
}
public StreamResponse onChart(final int width, final int height/*, Object ...rest*/){
return new StreamResponse(){
public String getContentType(){
return "image/jpeg";
}
public InputStream getStream() throws IOException {
BufferedImage image = _context.createBufferedImage(width, height);
ByteArrayOutputStream byteArray = new ByteArrayOutputStream() ;
ChartUtilities.writeBufferedImageAsJPEG(byteArray, image) ;
return new ByteArrayInputStream(byteArray.toByteArray());
}
public void prepareResponse(Response response){}
};
}}