那里只有很少的Java(没有XML)JasperReport示例。我在尝试 以编程方式(用Java创建)创建一个简单的饼图,并陷入困境 实施。
请注意:我已经使用iReport Designer几天了,以便获取生成的自动生成的JRXML,现在我相信我已经很好地理解了饼图JRXML。但是我需要一个纯Java实现,一个根本不使用XML的实现。所以使用JRXmlLoader
也不是一种选择,部分原因是因为我只想学习Java API。
首先让我说明我将使用我自己的JRBeanArrayDataSource
POJO PieSlice
来提供饼图:
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>
因此,对于数据源返回的每个记录(bean)(在本例中为2),该记录的“label”属性作为当前切片的类别/键被输入饼图,并且该记录的“值”被输入图表作为当前切片的值。
我的问题是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
&amp; {{1} })到value
键/值表达式?
提前感谢您提供任何帮助。
答案 0 :(得分:2)
你接近解决方案。如果你认为JRDesignChartDataset
是一个抽象类(实际上它可能应该是一个抽象类),它可能会有所帮助,因为实例化它并不能真正帮助你获得任何地方。
每种不同类型的图表都有相应的数据集类型,它们都是JRDesignChartDataset
的子类。对于饼图,您需要使用
JRDesignPieDataset
,其中包含您一直在寻找的方法setKeyExpression()
和setValueExpression()
。
您可能会从查看javadoc中收集所有这些内容,但实际上这些方法已被弃用。而不是直接设置表达式,你应该创建一个
JRDesignPieSeries
对象并调用那里的方法,然后使用addPieSeries()