2011-11-10 55 views
5

我是JasperReports的全新品牌,并且正在慢慢地通过基础知识的方式努力。我有一种情况,我不想用DB驱动的数据填充饼图(通过所谓的数据源)。我想提供从运行时传入JasperFillManager的Java hashmap填充饼图所需的所有信息。JasperReport饼图示例

这将包括参数来标记饼图中的切片,设置它们的颜色并定义它们的权重/值(切片的大小)。所以,在我的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片饼图的目标;红色的“红色团队”片占67%,蓝色的“蓝色团队”片占33%。

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

是否有人可以告诉我(或只是帮助指导我)朝着什么样的<pieChart> JRXML我需要编写以便让我的jrParam散列表填充饼图与运行时参数?我在下面做了一个最好的尝试,但我只是努力完全理解这一切。

<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> 

在此先感谢您的任何帮助/澄清!

回答

5

zharvey,

既然你是相当新的JasperReport的我希望你正在使用的iReport的设计工具。从iReport设计人员的示例模板之一设计饼图,然后尝试研究生成的JRXML。有一个非常简单的示例,你可以看看什么时候去iReport->帮助 - >样本 - >图表

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

+0

Mechkov谢谢你的回应。是的,我正在使用iReports(及其图表示例),这是我从我的问题中获得大部分JRXML的地方。我同意在大多数情况下,我想用JRDataSource来填充我的报表数据,在这种情况下,我需要一个JRBeanDataSource。不过,我只是想知道是否可以使用纯哈希映射的参数,如果是的话,JRXML的样子。再次感谢您的回应! – IAmYourFaja

+0

或者,如果您可以编辑它以提供如何编写JRXML以使用JRBeanArrayDataSource,我会接受您的答案。假设我有一个PieSlice bean,它具有String标签,Color颜色和Double值作为其唯一的3个属性,以及每个属性的标准getter/setter。然后我在填充时将这些PieSlices的数组(大小= 2对应于我原来的问题中的2个切片)传递给JasperFillManager。 JRXML现在需要什么样子? – IAmYourFaja

+0

@Zvey我想写下整个代码,但是偶然发现了这个很好的解释......检查出来......哦,希望它能让你知道如何使用Map或List数据源来做到这一点。让我知道你是否有更多问题。问候! http://gilbertadjin.wordpress.com/2009/08/09/charting-with-jasper-reports/ – Mechkov

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!"); 
    } 
} 
+0

要清楚的是,这仍然需要使用iReport/JasperStudio构建图表,但数据会以编程方式填充。 –