Charts 更改JasperReports图表的呈现方式

Charts 更改JasperReports图表的呈现方式,charts,jasper-reports,Charts,Jasper Reports,我正在尝试更改JasperReports中图表的渲染类型。我已经正确设置了图表定制器属性,可以找到该类[在调试时命中],但是在呈现报告时不会进行请求的更改 JRChartCustomizer类是: public class PriceGraph implements JRChartCustomizer { public void customize(JFreeChart chart, JRChart jasperChart) { XYPlot plot = (XYPlo

我正在尝试更改JasperReports中图表的渲染类型。我已经正确设置了图表定制器属性,可以找到该类[在调试时命中],但是在呈现报告时不会进行请求的更改

JRChartCustomizer类是:

public class PriceGraph implements JRChartCustomizer {

    public void customize(JFreeChart chart, JRChart jasperChart) {
        XYPlot plot = (XYPlot) chart.getPlot();
        XYItemRenderer renderer = plot.getRenderer();

        Shape shp = new Rectangle2D.Double(-0.5, -0.5, 1.0, 1.0);
        renderer.setBaseShape(shp);
        renderer.setSeriesPaint(0, Color.yellow);
        renderer.setBasePaint(Color.green);
    }
}

以前有人遇到过这个问题吗?

您需要调用
plot.setRenderer(…)
将渲染器实际应用到图表

我的代码如下所示:

public void customize(JFreeChart chart, JRChart jasperChart) {
    XYPlot plot = (XYPlot) chart.getPlot();
    XYLineAndShapeRenderer renderer = plot.getRenderer();
    Shape shp = new Rectangle2D.Double(-0.5, -0.5, 1.0, 1.0);
    renderer.setSeriesShape(0, shp);
    renderer.setSeriesPaint(0, Color.yellow);
    renderer.setSeriesShapesVisible(0, Boolean.TRUE);
    renderer.setSeriesLinesVisible(0, Boolean.FALSE);
    plot.setRenderer(0, renderer);
}

那么,为什么会接受这个答案呢?我添加了plot.setRenderer(renderer),它仍然从中生成不同的形状:在您的代码和我的代码之间还有一些其他的差异。我使用concrete renderer类而不是接口,为特定系列设置形状和渲染器,并调用
setSeriesShapesVisible(…)
以确保显示形状。请参阅上面的更改。问题是每个数据点都配置为一个新系列。更改此选项修复了自定义形状等的问题。之后,代码也不需要setRenderer