JasperReport JRDesign实现

时间:2011-11-10 20:55:41

标签: java reporting jasper-reports ireport

那里只有很少的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键/值表达式?

提前感谢您提供任何帮助。

1 个答案:

答案 0 :(得分:2)

你接近解决方案。如果你认为JRDesignChartDataset是一个抽象类(实际上它可能应该是一个抽象类),它可能会有所帮助,因为实例化它并不能真正帮助你获得任何地方。

每种不同类型的图表都有相应的数据集类型,它们都是JRDesignChartDataset的子类。对于饼图,您需要使用 JRDesignPieDataset,其中包含您一直在寻找的方法setKeyExpression()setValueExpression()

您可能会从查看javadoc中收集所有这些内容,但实际上这些方法已被弃用。而不是直接设置表达式,你应该创建一个 JRDesignPieSeries对象并调用那里的方法,然后使用addPieSeries()

将其添加到您的图表中