JasperReport饼图示例

时间:2011-11-10 17:00:49

标签: java reporting jasper-reports ireport

我对JasperReports来说是全新的,我正在慢慢地对抗基础知识。我有一种情况,我不想用DB驱动的数据填充饼图(通过所谓的数据源)。我想提供从运行时传递到JasperFillManager的Java哈希图填充饼图所需的所有信息。

这将包括在饼图中标记切片,设置颜色以及定义其权重/值(切片大小)的参数。因此,在我的Java代码中的某些时候,我会写某些,如:

HashMap<String,Object> jrParams = new HashMap<String,Object>();

jpParams.put("slice_1_label", "Red Team");
jpParams.put("slice_1_color", Color.RED);
jpParams.put("slice_1_value", 67.0);
jpParams.put("slice_2_label", "Blue Team");
jpParams.put("slice_2_color", Color.BLUE);
jpParams.put("slice_2_value", 33.0);

// ... some other code

JasperFillManager.fillReport(jasperDesign, jrParams);

我想在这里实现的目标是拥有一个包含2个切片的饼图;一个红色的“Red Team”切片占据了67%的份额,蓝色的“Blue Team”切片占据了33%的份额。

我现在需要帮助“在我的hashmap和JRXML / JasperDesign之间连接点”。

为了让我的<pieChart> hashmap用运行时参数填充饼图,有人可以向我展示(或者只是帮助指导我)我需要写的jrParam JRXML吗?我已经在下面做了一个最好的尝试,但我只是在努力使我们完全理解这一切。

<pieChart>
    <chart isShowLegend="true">
        <reportElement x="10" y="10" width="300" height="300"/>
        <chartTitle>
            <titleExpression><![CDATA[My First JR Pie Chart]]></titleExpression>
        </chartTitle>
    </chart>
    <pieDataset>

        <!-- Here is where I believe I need to put my two slices; not sure how -->

    </pieDataset>
    <piePlot>
        <plot backcolor="#8BA870"/>
        <itemLabel color="#000000"/>
    </piePlot>
</pieChart>

提前感谢您的任何帮助/澄清!

2 个答案:

答案 0 :(得分:5)

zharvey,

由于您是JasperReport的新手,我希望您使用的是iReport Designer工具。从iReport设计器具有的一个示例模板设计饼图,然后尝试研究生成的JRXML。在进入iReport时,您可以看到一个非常简单的示例 - &gt;帮助 - &gt;样本 - &gt;图表

我的第二个提示是使用java bean或POJO作为数据源(仅基于您发布的代码)。我正在查看您创建字符串标签,颜色和值的示例代码。如果你有一个普通的旧java bean类,并将所有这三个属性作为实例变量,那么这不是很好吗?您的报告也很容易,因为您可以创建一个bean对象集合,可以通过JRBeanDataSource轻松访问和使用它们。 我觉得它会让你的代码更清洁,更容易维护。 此致!

答案 1 :(得分:0)

查看此代码是否对您有所帮助!我使用下面的代码创建了一个条形图,该代码使用javabean作为数据源。如果你想通过我的jrml,我也可以提供。

public class App{
    String cname;
    int mark;
    public void setCname(String cname){
        this.cname = cname;
    }
    public void setMark(int mark){
        this.mark = mark;
    }
    public String getCname(){
        return cname;
    }
    public int getMark(){
        return mark;
    }
    public static ArrayList<App> getDetails() {
        ArrayList<App> clist= new ArrayList<App>();
        App c1 = new App();
        c1.setCname("English");
        c1.setMark(58);
        clist.add(c1);
        c1 = new App();
        c1.setCname("Social  Studies");
        c1.setMark(68);
        clist.add(c1);
        c1 = new App();
        c1.setCname("Culture");
        c1.setMark(78);
        clist.add(c1);
        c1 = new App();
        c1.setCname("Maths");
        c1.setMark(78);
        clist.add(c1);
        c1 = new App();
        c1.setCname("Physics");
        c1.setMark(100);
        clist.add(c1);
        return(clist);
    }

    public static void main( String[] args ) {
        JasperReport jasperReport;
        JasperPrint jasperPrint;
        Map<String, Object> param = new HashMap<String, Object>();
        try {
            String sourceFileName = ".jrxml";
            jasperReport = JasperCompileManager.compileReport(sourceFileName);
            jasperPrint = JasperFillManager.fillReport(jasperReport,param,new JRBeanCollectionDataSource(getDetails()));
            JasperExportManager.exportReportToPdfFile(jasperPrint, ".pdf");
        }
        catch(Exception e){
        }
        System.out.println( "Hello World!" );
    }
}