有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java JasperReport饼图示例

我是JasperReports的新手,我正在慢慢地通过基础知识奋斗。我不想用DB驱动的数据(通过所谓的数据源)填充饼图。我想提供在运行时从传递到JasperFillManager的Java hashmap填充饼图所需的所有信息

这将包括用于在饼图中标记切片、设置其颜色和定义其权重/值(切片大小)的参数。因此,在我的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);

我在这里试图实现的目标是有一个包含两个部分的饼图;一个红色的“红色团队”占据了蛋糕的67%,一个蓝色的“蓝色团队”占据了33%

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

有人能告诉我(或者只是帮助我)为了让我的jrParamhashmap用运行时参数填充饼图,我需要编写什么类型的<pieChart>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) 个答案

  1. # 1 楼答案

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

    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!" );
        }
    }
    
  2. # 2 楼答案

    扎维

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

    我给您的第二个技巧是使用JavaBeans或POJO作为数据源(仅基于您发布的代码)。我正在查看您的示例代码,其中您正在创建字符串标签、颜色和值的映射。如果您有一个普通的旧JavaBean类,将所有这三个属性作为实例变量,那将不是一件容易的事吗?这对于您的报告也很容易,因为您可以创建bean对象的集合,这些对象可以通过JRBeanDataSource轻松访问和使用。 我觉得这会让你的代码更干净,更容易维护。 问候