gpt4 book ai didi

charts - 如何使用 JavaBeans 集合数据集填充图表数据?

转载 作者:行者123 更新时间:2023-12-04 23:17:47 25 4
gpt4 key购买 nike

我已经创建了一个工作 jrxml 报告,该报告显示了一个由 Java bean 集合 (List) 的数据集填充的表。

现在我想使用相同的数据集来创建图表(初学者的基本条形图)。每个 bean 包含 4 个我想在条形图上显示的值:月、正常时间、旅行时间和加类时间。我希望每个 bean 会为每个月生成一组 3 条柱,因此最终图表将包含从下到上增长的 12x3 条柱,月份名称将作为 3 条柱组下的标签,每个组从左到右依次排列。

不幸的是,创建此图表似乎比我想象的要困难得多。至少它与创建表相比似乎完全不同。我不确定 Jasper Studio 的图表向导是否有效。至少它不允许我在图表数据系列对话框中添加任何系列:如果我按添加绝对没有任何 react - 没有对话框打开,没有错误消息,没有,没有提示我什么是错误的。

主要问题是我没有看到将数据集数据连接到图表的方法。

在尝试将图表嵌入到我的主报表后,我尝试将它也添加到一个新的子报表中,该子报表仅用作图表容器。我将主报表数据集作为数据源传递给子报表,并尝试将其用作子报表图表中的主数据集。数据集/图表连接仍然不走运,例如如果我按下添加按钮,仍然没有任何 react 。

您可以在下面看到我正在使用的简单 bean。第一个,WorkingHoursReport 是我传递给作为 JRBeanCollectionDataSource 报告的 bean。我相信那个 bean 最有趣的领域是 WorkingHours-beans 的列表。该 list 上总是有 12 个项目:每个月一个。这是我当前使用数据源表达式传递给我的表元素的列表:new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{workingHours})。

工作时间报告.java:

public class WorkingHoursReport extends CommonReport {
private int year;
private List<WorkingHours> workingHours;
}

工作时间.java:
public class WorkingHours {

private int month = 0;
private double hoursNormal = 0;
private double hoursTravel = 0;
private double hoursOvertime = 0;
private double hoursTotal = 0;
private double hoursTotalCumulative = 0;
}

在尝试创建我的第一个图表时,我很自然地尝试使用与我已经成功使用我的表格相同的命令来定义数据源来将数据填充到图表中:
new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{workingHours}).

不幸的是,似乎至少 jasper studio 图表创建向导没有与数据建立任何连接(没有打开对话框,根据文档,我应该能够选择要图表的数据字段)。

最佳答案

考虑到您使用的是 java bean,需要总结数据,然后同时拥有系列(小时)和类别(月),这就是我将如何解决您的问题。不要将它连接到你的表数据源,而是为它创建一个特定的数据源。

创建一个特定的图表 bean

public class ChartData {
private String serie;
private String category;
private double value;

public ChartData(String serie, String category, double value) {
super();
this.serie = serie;
this.category = category;
this.value = value;
}
.... getter and setters
}

用数据填充图表 bean

循环您的数据集(列表)并填充 ChartData 列表,您可能需要一张 map 来查找同一月份并添加到小时数中。我不会向你展示这个,而是静态地创建它们来展示一个例子
List<ChartData> cList = new ArrayList<ChartData>();
cList.add(new ChartData("hoursNormal","month1", 12.3)); //The use of resources or static text is beyond this example
cList.add(new ChartData("hoursTravel","month1", 3.2));
cList.add(new ChartData("hoursOvertime","month1", 1.3));
cList.add(new ChartData("hoursNormal","month2", 16.4));
cList.add(new ChartData("hoursTravel","month2", 5.2));
cList.add(new ChartData("hoursOvertime","month2", 4.1));

通过参数映射 将 List 作为数据源传递
Map<String, Object> paramMap = new HashMap<String, Object>();
paramMap.put("CHART_DATASET", new JRBeanCollectionDataSource(cList));

显示图表

现在我们可以在 title 中显示图表或 summary使用 subDataset 的乐队传递参数 $P{CHART_DATASET}
<?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="working_hours" pageWidth="595" pageHeight="842" whenNoDataType="AllSectionsNoDetail" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="1a12c021-57e2-4482-a273-56cbd3f78a17">
<subDataset name="chartDataSet" uuid="119b7f0e-01ef-4e2b-b628-d76f51e83768">
<field name="serie" class="java.lang.String"/>
<field name="category" class="java.lang.String"/>
<field name="value" class="java.lang.Double"/>
</subDataset>
<parameter name="CHART_DATASET" class="net.sf.jasperreports.engine.data.JRBeanCollectionDataSource" isForPrompting="false"/>
<summary>
<band height="142" splitType="Stretch">
<barChart>
<chart>
<reportElement x="80" y="0" width="337" height="142" uuid="c8f4dc5d-47e7-489b-b27e-09976d90994a"/>
<chartTitle/>
<chartSubtitle/>
<chartLegend/>
</chart>
<categoryDataset>
<dataset>
<datasetRun subDataset="chartDataSet" uuid="abec2dce-b670-4e84-b71f-469d954dbcb5">
<dataSourceExpression><![CDATA[$P{CHART_DATASET}]]></dataSourceExpression>
</datasetRun>
</dataset>
<categorySeries>
<seriesExpression><![CDATA[$F{serie}]]></seriesExpression>
<categoryExpression><![CDATA[$F{category}]]></categoryExpression>
<valueExpression><![CDATA[$F{value}]]></valueExpression>
</categorySeries>
</categoryDataset>
<barPlot>
<plot/>
<itemLabel/>
<categoryAxisFormat>
<axisFormat/>
</categoryAxisFormat>
<valueAxisFormat>
<axisFormat/>
</valueAxisFormat>
</barPlot>
</barChart>
</band>
</summary>
</jasperReport>

JasperSoft Studio 中的设置

Studio

享受结果

Result

关于charts - 如何使用 JavaBeans 集合数据集填充图表数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35800235/

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