2011-11-10 20 views
5

Ben JasperReports için yepyeni ve yavaş yavaş temelleri ile yolumdan mücadele ediyorum. Ben bir pasta grafik DB-odaklı veri (datasource denilen) ile doldurmak istemiyorum bir durum var. Çalışma zamanında JasperFillManager'a aktarılan Java hashmap'ından pasta grafiğini doldurmak için gereken tüm bilgileri sağlamak istiyorum.JasperReport Pie Chart Örnek

Bu, pasta grafikteki dilimleri etiketlemek, renklerini ayarlamak ve ağırlık/değerlerini (dilimlerin boyutunu) tanımlamak için parametreler içerir. Yani, benim Java kodunda bir noktada, şöyle şey yazıyor olacağını:

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

Ben 2 dilim bir pasta grafiği var olacaktır Burada elde etmek çalışıyorum gol; Kırmızı "Kırmızı Takım" dilim turtanın% 67'sini alır ve mavi "Mavi Takım" dilim% 33 oranında artar.

Şimdi hasasp ile JRXML/JasperDesign arasında "noktaların birleştirilmesi" konusunda yardıma ihtiyacım var.

birisi bana göster (ya da sadece bana yol yardım) Ben çalışma zamanı parametreleri ile pasta grafiği doldurmak HashMap benim jrParam sahip olmak için yazmak gerekir <pieChart> JRXML ne tür doğru Can ya? Aşağıda en iyi denemeyi yaptım, ama sadece tümüyle anlam kazanmaya çalışıyorum.

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

Herhangi bir yardım/açıklama için şimdiden teşekkür ederiz!

cevap

5

zharvey,

sen i İReport Tasarımcı aracını kullanıyorsanız umuyorum JasperReport oldukça yeni olduğu için. IReport tasarımcısının sahip olduğu örnek şablonlardan bir pasta grafiği oluşturun ve ardından oluşturulan JRXML'yi incelemeye çalışın. IReport-> Yardım-> Numuneler-> Grafikler'e giderken bakabileceğiniz çok kolay bir örnek var -> Charts

İkinci ipucum sizin için veri kaynağı olarak java fasulyeleri veya POJO'ları kullanmaktır (sadece gönderdiğiniz). Dize etiketini, rengini ve değerlerini oluşturduğunuz örnek kodunuza bakıyorum. Örnek değişken olarak tüm bu üç özelliğe sahip eski bir java fasülyesi sınıfınız olsaydı hoş ve kolay olmaz mıydı? Raporunuz için de kolay olurdu, çünkü JRBeanDataSource aracılığıyla kolayca erişilebilen ve kullanılabilen fasülye nesneleri koleksiyonu oluşturabilirsiniz. Kodunuzun biraz daha temiz ve bakımını kolaylaştıracağını hissediyorum. Saygılar!

+0

Mechkov cevabınız için teşekkür ederiz. Evet, iReports'u (ve onun Charts örneğini) kullanıyorum. Bu, JRXML'nin çoğunu sorularımdan aldım. Çoğu durumda, rapor verilerimi bir JRDataSource ile doldurmak istiyorum ve bu durumda bir JRBeanDataSource olduğunu kabul ediyorum. Bununla birlikte, sadece saf bir parametreler parametresi kullanıp kullanamayacağını merak ediyorum ve eğer öyleyse, JRXML'nin neye benzeyeceğini merak ediyorum. Cevabınız için tekrar teşekkürler! – IAmYourFaja

+0

Alternatif olarak, JRXML'yi bir JRBeanArrayDataSource ile çalışacak şekilde yazmayı sağlamak için düzenleyebiliyorsanız, cevabınızı kabul ediyorum. Dize etiketi, Renk rengi ve Tek 3 değeri olan bir PieSlice çekirdeğimin yanı sıra her biri için standart alıcılar/ayarlayıcılar olduğunu varsayalım. Daha sonra JasperFillManager'ı doldurma sırasında bu PieSlices'ın bir dizisini (orijinal sorudaki 2 kesime karşılık gelen boyut = 2 ile) geçiriyorum. JRXML'nin şimdi nasıl görünmesi gerekiyor? – IAmYourFaja

+0

@Zharvey Bütün kodu yazacaktım, ama bu büyük açıklama üzerine tökezledim ... Şunu kontrol et ... Ah, ve umarım size bir Harita veya Liste veri kaynağı ile nasıl yapılacağı hakkında bir fikir verir. .Eğer başka sorunuz varsa bana haber verin. Saygılarımızla! http://gilbertadjin.wordpress.com/2009/08/09/charting-with-jasper-reports/ – Mechkov

0

Bu kodun size yardımcı olup olmadığını görün! Veri kaynağı olarak javabean kullanan aşağıdaki kodu kullanarak bir çubuk grafik oluşturdum. Eğer jrml'den geçmek istiyorsanız bunu da sağlayabilirim.

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

Net olmak gerekirse, bu hala iReport/JasperStudio kullanarak grafiğin oluşturulmasını gerektirir, ancak veriler daha sonra programatik olarak doldurulur. –

İlgili konular