【发布时间】:2011-11-10 20:55:41
【问题描述】:
只有很少的纯 Java(无 XML)JasperReport 示例。我正在尝试 以编程方式(在 Java 中)创建一个简单的饼图并且我陷入了一些困境 的实施。
请注意:我已经使用 iReport Designer 好几天了,以便了解自动生成的 JRXML,现在相信我已经很好地理解了饼图 JRXML。但是我在这里需要一个纯 Java 实现,一个根本不使用 XML 的实现。所以使用JRXmlLoader 也不是一个选项,部分原因是我只想学习Java API。
首先让我声明我将从使用我自己的PieSlice POJO 的JRBeanArrayDataSource 提供饼图:
public class PieSlice
{
private String label;
private Double value;
public PieSlice()
{
this("", -1);
}
public PieSlice(String lbl, Double val)
{
setLabel(lbl);
setValue(val);
}
public String getLabel()
{
return label;
}
public String getValue()
{
return value;
}
}
然后我将为数据源创建一个工厂并将其提供给JasperFillManager,如下所示:
public class PieSliceFactory
{
private static String[] slices =
{
new PieSlice("Fizz", 75.0),
new PieSlice("Buzz", 25.0);
};
public static getSlices()
{
return ArrayList.asList(slices);
}
}
JasperReport jasperReport = JasperFillManager.fillReport(jasperDesign, new JRBeanArrayDataSource(PieSliceFactory.getSlices()));
这应该用 2 个切片填充报表的饼图。 我正在为 JasperDesign 对象苦苦挣扎。 通常,支持此功能的 JRXML 如下所示:
<pieDataset>
<keyExpression><![CDATA[$F{PieSlice}.label]]></keyExpression>
<valueExpression><![CDATA[$F{PieSlice}.weight]]></valueExpression>
</pieDataset>
因此,对于数据源(在本例中为 2)返回的每条记录(bean),该记录的“标签”属性作为当前切片的类别/键输入到饼图中,并且该记录的“值”输入到图表作为当前切片的值。
我的问题是 Java JasperDesign API 似乎不支持这一点(至少对于新手来说)。我希望看到 API 能够实现以下方面的功能:
JRDesignChart piechart = new JRDesignChart();
JRDesignChartDataset pieDataset = new JRDesignChartDataset();
JRExpression pieLabelExrepssion, pieValueExpression;
pieLabelExpression = new JRExpression(java.lang.String, "$F{PieSlice}.label");
pieValueExpression = new JRExpression(java.lang.Double, "$F{PieSlice}.value");
pieDataset.setKeyExpression(pieLabelExpression);
pieDataset.setValueExpression(pieValueExpression();
piechart.addDataset(pieDataset);
但令我惊讶的是,JRDesignChartDataset 在 JRXML 中没有 <keyExpression> 和 <valueExpression> 标记的方法/属性。
我怎样才能做到这一点? 我应该使用什么JRDesign 类/方法将我的PieSlice 属性(label 和value)映射到<pieDataset> 键/值表达式?
提前感谢所有帮助。
【问题讨论】:
标签: java reporting jasper-reports ireport