2011-11-10 48 views
5

Soy nuevo en JasperReports y estoy luchando poco a poco por lo básico. Tengo una situación en la que no quiero completar un gráfico circular con datos basados ​​en DB (a través de la llamada fuente de datos ). Deseo proporcionar toda la información necesaria para completar el gráfico circular de un hashmap Java pasado a JasperFillManager en tiempo de ejecución.JasperReport Gráfico de tarta Ejemplo

Esto incluiría parámetros para etiquetar las divisiones en el gráfico circular, establecer sus colores y definir sus pesos/valores (tamaño de las divisiones). Por lo tanto, en algún momento de mi código Java, estaría escribiendo algo así como:

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

El objetivo que estoy tratando de lograr aquí sería tener un gráfico circular con 2 rebanadas; una rebanada roja de "Equipo rojo" ocupa el 67% del pastel, y una rebanada azul del "Equipo azul" sube un 33%.

Ahora necesito ayuda para "conectar los puntos" entre mi hashmap y el JRXML/JasperDesign.

Puede alguien o me mostrar (o simplemente ayudar a guiarme) hacia qué tipo de <pieChart> JRXML que tendría que escribir con el fin de tener mi jrParam HashMap llenar el gráfico de sectores con los parámetros de tiempo de ejecución? Hice un mejor intento a continuación, pero estoy luchando por tener un sentido total de todo.

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

¡Gracias de antemano por cualquier ayuda/aclaración!

Respuesta

5

zharvey,

Dado que usted es bastante nuevo en JasperReport estoy esperando que está utilizando la herramienta de diseñador iReport. Diseñe un gráfico circular a partir de una de las plantillas de muestra que tiene el diseñador de iReport y luego intente estudiar el JRXML generado. Hay una muestra muy fácil que puede ver cuando vaya a iReport-> Ayuda-> Muestras-> Gráficos

Mi segundo consejo para usted es utilizar beans Java o POJO como fuente de datos (simplemente en función del código que publicó) Estoy mirando el código de muestra donde está creando un mapa de etiqueta, color y valores de Cadena. ¿No sería agradable y fácil si tuvieras una clase simple de Java Bean con todas estas tres propiedades como variable de instancia? También sería fácil para su informe, ya que puede crear una colección de objetos de frijol a los que se pueda acceder fácilmente y utilizar a través de JRBeanDataSource. Creo que hará que su código sea un poco más limpio y más fácil de mantener. Saludos!

+0

Mechkov gracias por su respuesta. Sí, estoy usando iReports (y su ejemplo de Gráficos) que es de donde saqué la mayor parte del JRXML en mi pregunta. Estoy de acuerdo en que en la mayoría de los casos me gustaría completar los datos de mi informe con JRDataSource y, en este caso, con JRBeanDataSource. Sin embargo, me pregunto si es posible usar un hashmap puro de parámetros, y si es así, cómo sería el JRXML. Gracias de nuevo por su respuesta! – IAmYourFaja

+0

Alternativamente, aceptaría su respuesta si pudiera editarla para proporcionar cómo escribir el JRXML para trabajar con un JRBeanArrayDataSource. Digamos que tengo un grano PieSlice que tiene la etiqueta de cadena, el color y el valor doble como sus únicas 3 propiedades, así como los captadores/ajustadores estándar para cada uno de ellos. Luego paso el JasperFillManager una matriz (con el tamaño = 2 correspondiente a las 2 rebanadas en mi pregunta original) de estos PieSlices en el momento del llenado. ¿Cómo debe verse el JRXML ahora? – IAmYourFaja

+0

@Zharvey Iba a escribir todo el código, pero tropecé con esta gran explicación ... Compruébalo ... Ah, y con suerte te da una idea de cómo hacerlo con una fuente de datos de Mapa o de Lista. .Déjame saber si tienes más preguntas. ¡Saludos! http://gilbertadjin.wordpress.com/2009/08/09/charting-with-jasper-reports/ – Mechkov

0

¡Vea si este código lo ayuda! Creé un gráfico de barras usando el siguiente código que usa javabean como fuente de datos. Si desea revisar mi archivo jrml, puedo proporcionarlo también.

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

Para ser claros, esto todavía requiere construir el gráfico usando iReport/JasperStudio, pero los datos se completan programáticamente. –

Cuestiones relacionadas