I am having some trouble getting some chart modifications to give me the required output in Jaspersoft. I am using JaspersoftReportsServer 5.6.1 which bundles JFreeCharts 1.0.12.
I have created the following chart customizer which has three purposes:
1. To remove the legend border (this is working as expected)
2. To create a difference fill between the first 2 series in my XY chart (this is partially working)
3. To set the first 2 series lines as dashed rather than solid (this is not working at all)
The code I have created is as follows:
Code: Select all
package bpiave.customizer;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Stroke;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYDifferenceRenderer;
import org.jfree.chart.renderer.xy.XYItemRenderer;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
public class BPIAveSuite implements net.sf.jasperreports.engine.JRChartCustomizer{
@Override
public void customize(org.jfree.chart.JFreeChart chart, net.sf.jasperreports.engine.JRChart jasperChart)
{
XYPlot plot = (XYPlot) chart.getPlot();
XYItemRenderer XYlineAndShapeRenderer =(XYLineAndShapeRenderer) plot.getRenderer();
Stroke dashed = new BasicStroke(1.0f,BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 10.0f, new float[] {10.0f}, 0.0f);
XYlineAndShapeRenderer.setBaseStroke(dashed);
XYlineAndShapeRenderer.setBaseItemLabelsVisible(false);
XYlineAndShapeRenderer.setSeriesStroke(
0, new BasicStroke(
1.5f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER,
1.0f, new float[] {4.0f, 2.0f}, 0.0f
)
);
XYlineAndShapeRenderer.setBaseStroke(dashed);
XYlineAndShapeRenderer.setBaseItemLabelsVisible(false);
XYlineAndShapeRenderer.setSeriesStroke(
1, new BasicStroke(
1.5f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER,
1.0f, new float[] {4.0f, 2.0f}, 0.0f
)
);
XYPlot plot1 = (XYPlot) chart.getPlot();
XYDifferenceRenderer r = new XYDifferenceRenderer(Color.lightGray,
Color.lightGray, false);
r.setRoundXCoordinates(true);
plot1.setRenderer(r);
if(chart.getLegend()!=null)
{
chart.getLegend().setBorder(0.0, 0.0, 0.0, 0.0);
}
}
}
Any help to resolve these issues would be very gratefully accepted - I have burnt a couple of days trying to figure this out so far without stumbling on a solution.
Thanks in advance.
Tony