2011-11-10 30 views
5

Sono nuovo di zecca per JasperReports e sto lentamente combattendo attraverso le basi. Ho una situazione in cui non voglio riempire un grafico a torta con dati basati su DB (tramite una cosiddetta fonte dati ). Voglio fornire tutte le informazioni necessarie per riempire il grafico a torta da una hashmap Java passata in JasperFillManager in fase di runtime.JasperReport Esempio di grafico a torta

Ciò include i parametri per etichettare le fette nel grafico a torta, impostare i loro colori e definire i loro pesi/valori (dimensione delle sezioni). Così, ad un certo punto nel mio codice Java, avrei scritto qualcosa simile:

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

L'obiettivo che sto cercando di realizzare qui sarebbe quello di avere un grafico a torta con 2 fette; una fetta rossa "Red Team" che occupa il 67% della torta e una fetta blu "Blue Team" aumenta del 33%.

Ora ho bisogno di aiuto per "connettere i punti" tra la mia hashmap e JRXML/JasperDesign.

Può qualcuno o me mostrare (o semplicemente aiutare mi guida) verso che tipo di <pieChart> jrxml avrei bisogno di scrivere per avere il mio jrParam hashmap riempire il grafico a torta con i parametri di esecuzione? Ho fatto un tentativo migliore sotto, ma sto solo cercando di dare un senso a tutto.

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

Grazie in anticipo per qualsiasi aiuto/chiarimento!

risposta

5

zharvey,

Dal momento che sono abbastanza nuovo per JasperReport spero si utilizza lo strumento iReport Designer. Progetta un grafico a torta da uno dei modelli di esempio che ha il designer iReport e quindi prova a studiare il JRXML generato. C'è un esempio molto semplice da consultare quando si passa a iReport-> Aiuto-> Esempi-> Grafici

Il mio secondo suggerimento è usare java bean o POJO come origine dati (basandosi semplicemente sul codice che hai postato). Sto osservando il tuo codice di esempio in cui stai creando una mappa di etichetta, colore e valori di stringa. Non sarebbe bello e facile se avessi una semplice vecchia classe java bean con tutte queste tre proprietà come variabile di istanza? Sarebbe facile anche per il tuo report, perché puoi creare una raccolta di oggetti bean che possono essere facilmente accessibili e utilizzati tramite JRBeanDataSource. Penso che renderà il tuo codice un po 'più pulito e più facile da mantenere. Saluti!

+0

Mechkov grazie per la risposta. Sì, sto usando iReports (e il suo esempio di grafici) che è il punto in cui ho ottenuto la maggior parte del JRXML nella mia domanda. Concordo sul fatto che nella maggior parte dei casi vorrei compilare i dati del mio rapporto con una JRDataSource e, in questo caso, su JRBeanDataSource. Tuttavia, mi sto semplicemente chiedendo se è possibile usare una pura hashmap di parametri e, in tal caso, come sarebbe il JRXML. Grazie ancora per la tua risposta! – IAmYourFaja

+0

In alternativa, accetterei la tua risposta se potessi modificarla per fornire come scrivere JRXML per lavorare con una JRBeanArrayDataSource. Supponiamo che io abbia un bean PieSlice che abbia etichette String, Color color e Double value come le sue sole 3 proprietà, così come getter/setter standard per ognuna di esse. Passo quindi a JasperFillManager un array (con dimensione = 2 corrispondente alle 2 fette nella mia domanda originale) di questi PieSlices in fase di riempimento. Che aspetto ha il JRXML adesso? – IAmYourFaja

+0

@Zharvey Stavo per scrivere l'intero codice, ma sono incappato in questa grande spiegazione ... Dai un'occhiata ... Oh, e spero che ti dia un'idea di come farlo con una mappa o una fonte di dati Elenco .. .Fammi sapere se hai altre domande. Saluti! http://gilbertadjin.wordpress.com/2009/08/09/charting-with-jasper-reports/ – Mechkov

0

Vedere se questo codice è utile! Ho creato un grafico a barre usando il codice seguente che usa javabean come origine dati. Se vuoi passare attraverso il mio jrml, posso fornire anche questo.

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

Per essere chiari, questo richiede comunque di costruire il grafico usando iReport/JasperStudio, ma i dati vengono quindi compilati in modo programmatico. –

Problemi correlati