【问题标题】:JasperReport JRDesign ImplementationJasperReport JRDesign 实现
【发布时间】: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 中没有 &lt;keyExpression&gt;&lt;valueExpression&gt; 标记的方法/属性。

我怎样才能做到这一点? 我应该使用什么JRDesign 类/方法将我的PieSlice 属性(labelvalue)映射到&lt;pieDataset&gt; 键/值表达式?

提前感谢所有帮助。

【问题讨论】:

    标签: java reporting jasper-reports ireport


    【解决方案1】:

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

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

    您可能会通过查看 javadoc 收集所有这些信息,但这些方法实际上已被弃用。而不是直接设置表达式,您应该创建一个 JRDesignPieSeries 对象并在那里调用方法,然后使用 addPieSeries() 将其添加到图表中

    【讨论】:

    • GenericJon 我不知道我是怎么错过的——因为我一直盯着 Javadocs all.day.long。但是我现在在我的程序员心中有一个特殊的位置给你。谢谢,谢谢,谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多