gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 10:43:15 28 4
gpt4 key购买 nike

我正在使用 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com