Académique Documents
Professionnel Documents
Culture Documents
TutorialesdeProgramacionJava:CreacindeReportesconJasperRepotsyiReportsParte5:GrficasenReportes
3
Ms Siguienteblog
TutorialesdeProgramacionJava
BlogdedicadoatemasdeprogramacinactualesusandoellenguajedeprogramacinJavaylasltimasversionesdesusAPIsyHerramientas.
Pginaprincipal
PginadeConcursos
TutorialesUPAO2010
PresentacionesCapacitacin
LUNES,13DEABRILDE2009
DONACIONES
JAVATUTORIALESENFACEBOOK
JavaTutoriales
Megusta
JavaTutorialesha
aadidounafotonueva.
13demarzo
Para este ejemplo los datos que graficaremos son las ventas de consolas de ltima generacin (Wii, XBox360, y PS3). Tomaremos
estosdatosdeVGChartzque,aunquenosoncifrasoficiales,mantienesusdatosactualizados.Enelmomentodeescribirestetutorial
lasventasvan:
Wii:48.79%paranosotrosser49%
XBox360:29.63%paranosotrosser30%
PS3:21.57%paranosotrosser21%
Nota: Recientemente han aparecido las versiones 3.5 de JasperReports y iReports, por lo que comenzar a usarlos a partir de este tutorial. La
configuracindelabibliotecaJasperReportsquecreamosenestetutorialyelusodeiReportparaloquehemoshechohastaahoraesigual,porloque
16MegustaSehacompartido1vez
todoloquehemoshechoservir.
Bien,paracomenzarcrearemosunnuevoproyectoJavastandaloneenNetBeans(File>NewProject...>Java>Java
Application),leasignamosunnombre(queenmicasoserReporteGrafica)ypresionamoselbotn"Finish"paraqueelnuevo
proyectosegenereyveamoseneleditornuestraclaseMain.
Megusta
Comentar
A24386personaslesgustaJavaTutoriales
Agregamosalnodo"Libraries"denuestroproyectolabiblioteca"JasperReports"quecreamosenlaprimerpartedeltutorialyeljar
"commonslogging1.1.1.jar",comolohemosvenidohaciendohastaahora.
Adicionalmente debemos agregar dos jars ms que nos permitirn generar las grficas. Puesto que JasperReports hace uso de
JFreeChartparagenerarlasgrficasdebemosagregardosdesusjars:jfreechart.jar y jcommon.jar. Si bajaron JasperReports
en el archivo .zip que contiene las bibliotecas de soporte entonces ya tienen estos jars (que se encuentran en el directorio lib del .zip
anterior),solodebenagregarlosalnodo"Libraries"delproyecto.
Ahoranecesitamos,comoenloscasosanteriores,unaclasecuyasinstanciasmantendrnlosdatosquemostraremosenelreporte.En
estecaso,comoestamoshablandodeconsolas,creoquelomsadecuadoesqueestaseaunaclase"Jugador".Asqueagreguemos
estaclaseanuestroproyecto.
PluginsocialdeFacebook
Estaclasetendrtansolotresatributos:unid(queenestecasopodranosernecesario,peroesparanoperderlacostumbre,cuando
veamos algo de Hibernate veremos que es mejor acostumbrarnos desde el prinicpio a poner este id), un nombre para distinguir al
usuario,yelnombredelaconsolaquetiene(queeseldatoquenosinteresaparacrearlagrfica).
ElcdigodelaclaseJugadorquedadelasiguienteforma:
publicclassJugador
{
privateintid
privateStringnombre
privateStringconsola
publicJugador(intid,Stringnombre,Stringconsola)
{
this.id=id
this.nombre=nombre
this.consola=consola
}
http://www.javatutoriales.com/2009/04/creaciondereportesconjasperrepotsy_13.html
1/12
14/4/2015
TutorialesdeProgramacionJava:CreacindeReportesconJasperRepotsyiReportsParte5:GrficasenReportes
publicStringgetConsola()
{
returnconsola
}
publicvoidsetConsola(Stringconsola)
{
this.consola=consola
}
publicintgetId()
{
returnid
}
publicvoidsetId(intid)
{
this.id=id
}
publicStringgetNombre()
{
returnnombre
}
publicvoidsetNombre(Stringnombre)
{
this.nombre=nombre
}
}
ElcdigodelaclaseMaineselcdigoestandarquehemosestadousandoenestaseriedetutorialesdeJasperReports,conexcepcin
delaparteenlaquesecreanlosJugadores.Enestecasousaremostresciclos,unoparacadaconsola.Porloqueestapartedelcdigo
quedamsomenosas(listaJugadoresesunalistadeobjetosJugador):
SEGUIDORES
for(inti=1i<=49i++)
{
listaJugadores.add(newJugador(i,"Jugador"+i,"Wii"))
}
Participarenestesitio
GoogleFriendConnect
Miembros(195) Ms
for(inti=50i<=79i++)
{
listaJugadores.add(newJugador(i,"Jugador"+i,"XBox"))
}
for(inti=80i<=100i++)
{
listaJugadores.add(newJugador(i,"Jugador"+i,"PS3"))
}
AhoraabriremoseliReportycomenzaremosconeldiseodenuestroreporte.ElnuevoiReport(3.5.0)muestralosmensenelmismo
idiomaquenuestrosistemaoperativo,queenmicasoesespaol,porloqueapartirdeahoracolocarlosnombresdelasopcionesylos
mensenespaol(enelcasoenelquelosmuestreas,sialgunosemuestraeninglscolocarelnombreeningls).
Yaeresmiembro?Iniciarsesin
ARCHIVODELBLOG
2015(1)
2013(1)
CreamosunnuevoreportevaciollendoalmenArchivo>New...>EmptyReport.Enlaventanaqueseabrecolocamosel
nombredenuestroreporte(reporteGrafica.jrxml)yloguardamoseneldirectoriorazdenuestroproyectodeNetBeans:
2012(2)
2011(11)
2010(10)
2009(22)
septiembre(2)
agosto(2)
Comencemoscolocandounttuloylosencabezadosdenuestrascolumnasdedatosusandotextosestticos,ascomolosfieldspara
losdatosqueobtendremosdecadaunodelosobjetosJugador(id,nombre,yconsola) de la misma forma que lo hicimos en este
tutorial(noolvidenguardardeformaconstantesusavancesparanoperdersutrabajo):
julio(1)
junio(3)
mayo(2)
abril(5)
InstalacindeunServidordeDesar
Parte1...
CreacindeReportesconJasperRe
yiReports...
CreacindeReportesconJasperRe
yiReports...
CreacindeReportesconJasperRe
yiReports...
Ahora vienen los pasos interesantes. Primero debemos crear un grupo. Un grupo nos permite tratar de forma especial un conjunto de
datos que se encuentran asociados (es como un groupby en SQL). Adems, al crear un grupo se genera tambin una variable que
mantieneelconteodeloselementosdecadagrupo(comosihicieramosuncountsobreloselementosdelosgruposenSQL).
CreacindeReportesconJasperRe
yiReports...
marzo(2)
febrero(2)
http://www.javatutoriales.com/2009/04/creaciondereportesconjasperrepotsy_13.html
2/12
14/4/2015
TutorialesdeProgramacionJava:CreacindeReportesconJasperRepotsyiReportsParte5:GrficasenReportes
Enestecasoelgrupoquenosinteresaeseldelasconsolas.
Si estuvieramos usando consultas SQL obtener estos datos sera sencillo. Es ms, si hubieramos creado nuestro reporte usando el
"ReportWizard" podramos haber creado el grupo que nos interesa desde ahi. Pero como estamos usando un DataSource propio,
tenemosqueagregarelgrupoamano.AfortunadamenteesmuysencilloagregargruposdesdeiReport.Lonicoquedebemoshaceres
clickderechosobreelnodo"reportname" (la raz de los elementos del proyecto) en el panel "ReportInspector". Con esto se
abrirunmencontextual.Deesteseleccionamoselelemento"AddReportGroup":
enero(3)
Academia
de
Informtica
Multitud de
Cursos IT
Online. Desde
la Comodidad
de tu Casa!
Alhacerestoseabrirlaventanadel"GroupWizard".Enestacolocamoselnombredelgrupo,enestecasoserCONSOLAS,yenel
campo "Group by the following report object:" seleccionamos el field "consola" que creamos anteriormente. Con esto
conseguiremosqueelnuevogrupoquesecrearsehagaconrespectoalvalordelatributo"cosola"denuestrosobjeto"Jugador".
DATOSPERSONALES
Alex
Presionamoselbotn"Siguiente>"ysenosmostrarndosradiobuttonspreguntandosiquieremosagregarlacabecera(header)yel
pie de pagina (footer) del grupo. Nosotros deseleccionamos estas opciones (se encuentran seleccionadas por default) ya que no nos
interesaagregarningunodeestoselementos.Paraterminarpresionamoselbotn"Finalizar"yyatendremosagregadonuestrogrupo
^^.
No es muy obvio el que este grupo existe, de hecho los unicos indicadores que tenemos son que se han agregado en la zona de las
bandasdel"ReportInspector"dosnuevasbandas:"CONSOLASGroupHeader"y"CONSOLASGroupFooter", adems se ha
agregado una variable llamada "CONSOLAS_COUNT", que es la variable que nos interesa y por la que hemos creado el grupo, que
mantendrelnmerodejugadoresquetienencadaunadelasconsolas:
Ahoraagregaremosnuestragrfica.ParaesoarrastraremosdesdelaPaletadeelementosdelreporteun"Chart"ylocolocamosenla
banda"Summary"(ajusteneltamaodelabandaparaquelagrficaseveabien).
http://www.javatutoriales.com/2009/04/creaciondereportesconjasperrepotsy_13.html
3/12
14/4/2015
TutorialesdeProgramacionJava:CreacindeReportesconJasperRepotsyiReportsParte5:GrficasenReportes
Alarrastrarlagrficaseabrirunanuevaventanapreguntndonosqutipodegrficoqueremosmostrar.Enestecasoseleccionaremos
elgrficodepieodepastel(laprimerosegundaopcin):
Presionamoselbotn"OK"ylagrficaseagregaranuestroreporte,ajustenlaparaqueabarquetodaelreadelabanda.
Lo ltimo que haremos es configurar la grfica para que obtenga los datos de los campos y variables que nos interesa mostrar. Para
esto,hacemosclickderechosobrelagrfica,conloqueseabrirunmencontextual.Enestemenseleccionamoslaopcin"Chart
Data".
Conloqueseabrirunanuevaventana,yenestaventanaseleccionamoslapestaa"Details".Enestapestaaconfiguraremostres
valores:
Keyexpression
Valueexpression
Labelexpression
Nota: Dependiendo del tipo de grfica que estemos haciendo puede que debamos agregar ms valores, pero para los grficos de pie solo son
necesariosestos.
La"Keyexpression"diceculserlabasequeseusarparacadaunodelaspiezasdelagrfica.Ennuestrocasoqueremosque
cadatrozomuestrelasconsolas.Porloquecolocamoscomovalor$F{consola}.
http://www.javatutoriales.com/2009/04/creaciondereportesconjasperrepotsy_13.html
4/12
14/4/2015
TutorialesdeProgramacionJava:CreacindeReportesconJasperRepotsyiReportsParte5:GrficasenReportes
La "Valueexpression" dice cul ser el tamao de cada una de las piezas de la grfica. Nosotros queremos que cada pieza sea
equivalentealnmerodeconsolasquesehancomprado.Porloquecolocamoscomovalor$V{CONSOLAS_COUNT}.
Labelexpressioneslaetiquetaquesemostrarparacadavalor.Nosotrosqueremosmostrarelnombredelaconsolajuntoconel
nmero de unidades que se han vendido de cada una. Por lo que colocamos como valor $F{consola} + " " +
$V{CONSOLAS_COUNT}.Locualcolocarcomovalorelnombredelaconsola,concatenndoleelsigno""yconcatenndoleelnmero
deconsolasvendidas(elnmerodejugadoresquehancompradocadaunadelasconsolas).
Estaventanaquedadelasiguienteforma:
Presionamoselbotn"Close"yhemosterminadoconnuestroreporte.Cambiamosalavista"Preview"paracompilarelreporte.Nose
nosmostrarnadadelreportefinal.Dehecholosregresaralavistadel"Designer"ymostrarunaexcepcinenlaventanadesalida
indicandoalgoas:"Keyisnullinpiedataset".Estoesnormalyaquelagrficanopuedegenerarseyaquenoexistendatos.
Loimportanteesquesehayageneradoelarchivo"reporteGrafica.jasper".
Ahoraejecutamosnuestraaplicacin,conloquedebegenerarsenuestroreporteenPDFydebemosver,alfinaldelreporte,lasiguiente
grfica:
Conloquecomprobamoslagrficasehacreadocorrectamente^^.
FinalmenteesteeselcodigodelaclaseMain(omitiendolosimports):
publicclassMain
{
publicstaticvoidmain(String[]args)throwsException
{
ListlistaJugadores=newArrayList()
for(inti=1i<=49i++)
{
listaJugadores.add(newJugador(i,"Jugador"+i,"Wii"))
}
for(inti=50i<=79i++)
{
listaJugadores.add(newJugador(i,"Jugador"+i,"XBox"))
}
for(inti=80i<=100i++)
{
listaJugadores.add(newJugador(i,"Jugador"+i,"PS3"))
}
JasperReportreporte=(JasperReport)JRLoader.loadObject("reporteGrafica.jasper")
JasperPrintjasperPrint=JasperFillManager.fillReport(reporte,null,newJRBeanCollectionDa
taSource(listaJugadores))
http://www.javatutoriales.com/2009/04/creaciondereportesconjasperrepotsy_13.html
5/12
14/4/2015
TutorialesdeProgramacionJava:CreacindeReportesconJasperRepotsyiReportsParte5:GrficasenReportes
JRExporterexporter=newJRPdfExporter()
exporter.setParameter(JRExporterParameter.JASPER_PRINT,jasperPrint)
exporter.setParameter(JRExporterParameter.OUTPUT_FILE,newFile("reportegrafica.pdf"))
exporter.exportReport()
}
}
Bueno,esperoquelesseadeutilidad.Noolvidendejarsuscomentarios,dudasysugerencias.
Saludosygracias.
Visitalaparte1deestetutorial:ReportesconConexinaBasesdeDatos
Visitalaparte2deestetutorial:UsandoDataSourcesPersonalizados
Visitalaparte3deestetutorial:ParmetrosyVariables
Visitalaparte4deestetutorial:Reportesenaplicacionesweb
Visitalaparte6deestetutorial:Grupos
Visitalaparte7deestetutorial:Subreportes
PublicadoporAlexen17:11
divertido (0)
Reacciones:
interesante (0)
increible (0)
no me gusta (0)
44comentarios:
Annimo 5demayode2009,7:03
Hola,tengounproblemaalintentarmostrarunganttChartenlaweb.Tecuento,herealizadomuchosreportes,todobien,contomcat6.0,
ireport3.1yjasperreport3.1.3...Pero,elganttlopintabienenireport,peroalcargarlaaplicacionwebentoncesmedaelsiguienteerror
ElementganttChartnodefined.
Qpuedohacer??
Responder
ProgramadorJava 5demayode2009,7:08
Hola
SegunlosforosdeJasperReportsparecequehayproblemasconlaganttCharenalgunossistemasoperativosyconalgunasversiones
anterioresdeJasperReports(poralgunaraznquedesconozco).PorqunopruebasactualizaralaltimaversintantodeiReporcomo
deJasperReport?
Saludos.
Responder
michael_demonio 22dejuniode2009,22:13
Hola, estoy intentando insertar un grfico y no puedo, me sale un error de compilacin lo que pretendo es mostrar en un grfico, la
cantidaddepersonasquesonestudiantes,profesores,prospectoseinteresadosdedeterminadainstitucineducativa.
Esperokemepuedanayudar
muchasgraciasdeantemano
Responder
Alex
23dejuniode2009,6:55
Hola,podrasdecirmequeerroreselquetesaleytalvezponerpartedelcdigoqueestasusandoyplaticarunpocodeloqueestas
haciendoeneliReport?
Saludos
http://www.javatutoriales.com/2009/04/creaciondereportesconjasperrepotsy_13.html
6/12