java - jfree 图表 org.jfree.chart.plot.CategoryPlot 无法转换为 org.jfree.chart.plot.XYPlot

标签 java jasper-reports jfreechart

我正在使用 Studio 创建 JasperReports 的报告。我需要增加折线图的宽度(默认值太细)。据我所知,JasperReports 使用 Jfeechart 作为图表,我用谷歌搜索了这段代码来进行定制。

public class TSChartCustomizer extends JRAbstractChartCustomizer {
    public void customize(JFreeChart chart, JRChart jasperChart) {
       XYLineAndShapeRenderer renderer = (XYLineAndShapeRenderer) chart.getXYPlot().getRenderer();
        BasicStroke stroke = new BasicStroke(3f);
        renderer.setSeriesStroke(1, stroke);
    }
}

我已经构建了上面的类并将其添加到一个 jar 中,并将其添加到 jasper 项目中。并且在图表属性中可以选择定制器类中的类。但是当我运行报告时出现了这个错误:

java.lang.ClassCastException: org.jfree.chart.plot.CategoryPlot cannot be cast to org.jfree.chart.plot.XYPlot

我认为问题可能出在代码上,但我不知道 Jfreechart...

P.S 下面是报告代码,非常简单的演示代码:

<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="test6" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="f147421f-bbe6-42bd-b26e-7f4f7cee333a">
    <queryString>
        <![CDATA[select 'p1' as prod, 'm1' as mon, 10 as num
union all select 'p1' as prod, 'm2' as mon, 20 as num
union all select 'p1' as prod, 'm3' as mon, 30 as num]]>
    </queryString>
    <field name="prod" class="java.lang.String"/>
    <field name="mon" class="java.lang.String"/>
    <field name="num" class="java.lang.Integer"/>
    <background>
        <band splitType="Stretch"/>
    </background>
    <summary>
        <band height="325" splitType="Stretch">
            <lineChart>
                <chart evaluationTime="Report">
                    <reportElement x="178" y="125" width="200" height="200" uuid="124ec6e6-b32d-477d-84a4-36c8d4df3ac2"/>
                    <chartTitle/>
                    <chartSubtitle/>
                    <chartLegend/>
                </chart>
                <categoryDataset>
                    <categorySeries>
                        <seriesExpression><![CDATA[$F{prod}]]></seriesExpression>
                        <categoryExpression><![CDATA[$F{mon}]]></categoryExpression>
                        <valueExpression><![CDATA[$F{num}]]></valueExpression>
                    </categorySeries>
                </categoryDataset>
                <linePlot>
                    <plot/>
                    <categoryAxisFormat>
                        <axisFormat/>
                    </categoryAxisFormat>
                    <valueAxisFormat>
                        <axisFormat/>
                    </valueAxisFormat>
                </linePlot>
            </lineChart>
        </band>
    </summary>
</jasperReport>

最佳答案

图表定制器不适用于类别图表,它应该用于 XY 或时间序列图表。

对于类别图表,您需要类似以下内容(还要注意系列索引是从 0 开始的):

public class TSChartCustomizer extends JRAbstractChartCustomizer {
    public void customize(JFreeChart chart, JRChart jasperChart) {
        AbstractCategoryItemRenderer renderer = (AbstractCategoryItemRenderer) chart.getCategoryPlot().getRenderer();
        BasicStroke stroke = new BasicStroke(3f);
        renderer.setSeriesStroke(0, stroke);
    }
}

关于java - jfree 图表 org.jfree.chart.plot.CategoryPlot 无法转换为 org.jfree.chart.plot.XYPlot,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37834723/

相关文章:

java - 调试无法检查变量

java - Jasper - ire​​port - java web 应用程序 - 数据源静态方法

jasper-reports - 报告中的项目符号和编号

java - JFreeChart 在 JTable 更改时动态绘图

java - 如何解决渲染错误: AppbarLayout and CoordinatorLayout class not initialized?

java - 如何在Java中通过telnet执行open命令?

JAVA:动态创建按钮的事件处理程序

function - Jasper 字符串函数方法未定义错误

java - JFreeChart 1.5.0 中的 createBarChart3D 是否等效?

java - JFreeChart - 创建移动图表时出现问题