2011-11-10 32 views
5

Tôi là thương hiệu mới với JasperReports và đang dần chiến đấu theo cách của mình thông qua các khái niệm cơ bản. Tôi có một tình huống mà tôi không muốn điền vào biểu đồ hình tròn với dữ liệu hướng DB (thông qua một nguồn dữ liệu được gọi là ). Tôi muốn cung cấp tất cả thông tin cần thiết để điền vào biểu đồ hình tròn từ một băm Java được chuyển vào JasperFillManager khi chạy.JasperReport Pie Chart Ví dụ

Điều này sẽ bao gồm các tham số để gắn nhãn các lát trong biểu đồ hình tròn, đặt màu và xác định trọng số/giá trị của chúng (kích thước của các lát). Vì vậy, tại một số điểm trong mã Java của tôi, tôi sẽ viết một cái gì đó như:

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

Mục đích tôi đang cố gắng để đạt được ở đây sẽ có một biểu đồ pie với 2 lát; một lát "Red Team" màu đỏ chiếm 67% của chiếc bánh, và một lát "Blue Team" màu xanh lam chiếm 33%.

Bây giờ tôi cần trợ giúp "kết nối các dấu chấm" giữa hashmap của tôi và JRXML/JasperDesign.

Ai đó có thể chỉ cho tôi (hoặc chỉ giúp tôi hướng dẫn) về loại <pieChart> JRXML nào tôi cần viết để có biểu đồ hình tròn có tham số thời gian chạy? Tôi đã thực hiện một nỗ lực tốt nhất bên dưới nhưng tôi chỉ đang vật lộn với ý nghĩa tổng thể của nó.

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

Cảm ơn bạn đã trợ giúp/giải thích!

Trả lời

5

zharvey,

Vì bạn khá mới với JasperReport tôi hy vọng bạn đang sử dụng công cụ thiết kế iReport. Thiết kế biểu đồ hình tròn từ một trong các mẫu mẫu mà nhà thiết kế iReport có và sau đó cố gắng nghiên cứu JRXML đã tạo. Có một mẫu rất dễ dàng mà bạn có thể xem khi truy cập iReport-> Help-> Samples-> Biểu đồ

Mẹo thứ hai của bạn là sử dụng hạt java hoặc POJO làm nguồn dữ liệu (chỉ dựa trên mã bạn đã đăng). Tôi đang xem mã mẫu của bạn, nơi bạn đang tạo nhãn, màu và giá trị của Bản đồ chuỗi. Sẽ không được tốt đẹp và dễ dàng nếu bạn đã có một lớp đậu java cũ đồng bằng với tất cả ba thuộc tính này như biến mẫu? Nó cũng dễ dàng cho báo cáo của bạn, bởi vì bạn có thể tạo một bộ sưu tập các đối tượng bean có thể dễ dàng truy cập và sử dụng thông qua JRBeanDataSource. Tôi cảm thấy nó sẽ làm cho mã của bạn sạch hơn một chút và dễ bảo trì hơn. Trân trọng!

+0

Mechkov cảm ơn bạn đã trả lời. Có Tôi đang sử dụng iReports (và mẫu biểu đồ của nó) là nơi tôi có hầu hết JRXML từ trong câu hỏi của tôi. Tôi đồng ý rằng trong hầu hết các trường hợp, tôi muốn điền dữ liệu báo cáo của mình với JRDataSource và trong trường hợp này là JRBeanDataSource. Tuy nhiên tôi chỉ đơn giản là tự hỏi nếu nó có thể sử dụng một hashmap tinh khiết của các thông số, và nếu như vậy, những gì JRXML sẽ như thế nào. Cảm ơn một lần nữa cho bạn phản ứng! – IAmYourFaja

+0

Ngoài ra, tôi chấp nhận câu trả lời của bạn nếu bạn có thể chỉnh sửa nó để cung cấp cách viết JRXML để làm việc với một JRBeanArrayDataSource. Giả sử tôi có một hạt PieSlice có nhãn Chuỗi, Màu màu và Giá trị gấp đôi là chỉ có 3 thuộc tính của nó, cũng như các getters/setters chuẩn cho mỗi thuộc tính. Sau đó tôi vượt qua JasperFillManager một mảng (với kích thước = 2 tương ứng với 2 lát trong câu hỏi ban đầu của tôi) của các PieSlices tại thời gian điền. JRXML cần phải trông như thế nào bây giờ? – IAmYourFaja

+0

@Zharvey Tôi sẽ viết toàn bộ mã, nhưng vấp phải lời giải thích tuyệt vời này ... Kiểm tra ... Oh, và hy vọng nó sẽ cho bạn một ý tưởng làm thế nào để làm điều đó với một nguồn dữ liệu Bản đồ hoặc Danh sách .. Cho tôi biết nếu bạn có thêm câu hỏi. Trân trọng! http://gilbertadjin.wordpress.com/2009/08/09/charting-with-jasper-reports/ – Mechkov

0

Xem mã này có giúp bạn không! Tôi đã tạo một biểu đồ thanh bằng cách sử dụng mã dưới đây sử dụng javabean làm nguồn dữ liệu. Nếu bạn muốn đi qua jrml của tôi tôi có thể cung cấp đó cũng có.

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

Để rõ ràng, điều này vẫn yêu cầu xây dựng biểu đồ bằng cách sử dụng iReport/JasperStudio, nhưng dữ liệu sau đó được điền vào theo chương trình. –