JRBeanCollectionDataSource: trabajando con arrays multidimensionales en Jasper Report.

En este tutorial vamos a ver cómo trabajar con una nube de puntos como fuente de datos de un informe de jasperReport.

JRBeanCollectionDataSource: trabajando con arrays multidimensionales en Jasper Report.

0. Índice de contenidos.


1. Introducción

Despúes de exponer como trabajar
con colecciones de tipos básicos en iReport
sin una fuente de datos definida, en este tutorial vamos a dar una vuelta de tuerca añadiendo
la complejidad de tener como parámetro en el informe un array multidimensional de tipos básicos, una nube de puntos.

Sin más, y tomando como referencia el tutorial anterior vamos a pintar la información anidada en listas dentro del informe.


2. Entorno.

El tutorial está escrito usando el siguiente entorno:

  • Hardware: Portátil MacBook Pro 15′ (2.4 GHz Intel Core i7, 8GB DDR3 SDRAM).
  • Sistema Operativo: Mac OS X Lion 10.7.4
  • iReport 4.7.1
  • Jasper Report 4.7.1


3. Creación de la plantilla jrxml.

Con la plantilla vacía y sin asignar una fuente de datos «Empty Datasource»:

Creamos un parámetro, para ello «botón derecho» sobre «Parameters» > «Agregar Parameter»:

Le asignamos un nombre, en nuestro caso «nube_puntos»:

Y accediendo a la ventana de propiedades, le damos una tipología en «Parameter Class» > «java.util.Float[][]»,
un array multidimensional de floats,

además pulsando sobre «Default Value Expression» podemos asignar algo
como lo siguiente para añadir un juego de pruebas:

Con ello, ya tenemos preparado nuestro parámetro para el entorno de pruebas y ahora vamos a añadir un componente visual de tipo
lista para iterar por su contenido y mostrar la nube de puntos.

Pulsando sobre icono anterior y arrantrándolo al area de la plantilla lo tendremos disponible para su edición:

Una vez incluido en la sección correspondiente de la plantilla «botón derecho» > «Edit datasource» mostrará una ventana como la que sigue:

En este punto son importantes dos cuestiones:

  • «Sub dataset» definirá los parámetros de entrada, campos, variables,… que vivirán en el ámbito de la lista y que, no tienen por qué coincidir
    con los de la plantilla padre, ahí será donde definiremos un campo «ad hoc»,
  • Connection / Datasource Expression: indica la fuente de datos para la lista que puede ser la misma fiente de datos que el informe padre u otra,
    en nuestro caso definimos una expresión usando la clase

    Text
    net.sf.jasperreports.engine.data.JRBeanCollectionDataSource

    y pasando
    como argumento al constructor una referencia al parámetro anteriormente definido.

Lo siguiente será definir un campo que haga referencia a cada uno de los items de la colección, si tuviéramos un objeto tipado,
añadiríamos los campos a mostrar de la clase o el bean en cuestión, como trabajamos con tipos básicos añadiremos un campo con la
palabra reservada _THIS, que hará referencia a cada una de las cadenas dentro de la iteración interna de la lista.

Sobre el dataset2, el que usa la lista, pulsamos «botón derecho» en «Fields» > «Agregar Field»

El nombre para nuestro campo es la palabra reservada _THIS y el tipo es un array de floats:

Con ello estamos accediendo a la primera dimensión, si queremos acceder a los puntos debemos incluir un nuevo componente de lista anidado

que estará asociada a nuevo dataset y tendrá la siguiente fuente de datos:

Este dataset tendrá un campo también con el nombre _THIS, pero del tipo java.lang.Float.

Con ello ya podemos incluir un campo $F{_THIS} en la lista anidada para hacer referencia a cada punto a imprimir:

El informe tendría una salida como la siguiente:



4. Generación del informe desde java.

Si el informe anterior lo tuviéramos que generar desde código bastaría hacer uso del servicio que vimos en el tutorial anterior de la siguiente forma:

	private static Float[][] puntos = new Float[][]{
			new Float[]{1.2f, 1.3f},
			new Float[]{1.4f, 1.5f},
			new Float[]{1.6f, 1.7f},
			new Float[]{1.8f, 1.9f, 1.10f, 1.11f},
			new Float[]{2.8f, 2.9f, 2.10f, 2.11f}
	};
	
	public static void main(String[] args) throws JRException {
		final Map<String,Object> parameters = new HashMap<String,Object>();
		parameters.put("nube_puntos", puntos);
		final ReportExporter reportExporter = new ReportExporter();
		reportExporter.toPDF("fichaEmpresa.jrxml", parameters);
	}

El resultado será el mismo que el obtenido desde el entorno de iReport.


5. Conclusiones.

Que que comentábamos, lo ideal es trabajar con objetos tipados ;).

Un saludo.

Jose

jmsanchez@autentia.com

Comentarios

4 respuestas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

He leído y acepto la política de privacidad

Información básica acerca de la protección de datos

  • Responsable: IZERTIS S.A.
  • Finalidad: Envío información de carácter administrativa, técnica, organizativa y/o comercial sobre los productos y servicios sobre los que se nos consulta.
  • Legitimación: Consentimiento del interesado
  • Destinatarios: Otras empresas del Grupo IZERTIS. Encargados del tratamiento.
  • Derechos: Acceso, rectificación, supresión, cancelación, limitación y portabilidad de los datos.
  • Más información: Puedes ampliar información acerca de la protección de datos en el siguiente enlace:política de privacidad

Software Architect 👷‍♀️ | Tech Leader 🚀 | Senior Developer: Backend 🧩 and occasionally in Frontend 🖼️ | DevSecOps 🛠️ | Banking 🏛️ | Digital Transformation Agent 🎯 | Problem Solver (Mr. Wolf) 🐺

¿Quieres publicar en Adictos al trabajo?

Te puede interesar

02/03/2026

José Antonio Sánchez Segovia

Zephyr es un RTOS open source respaldado por la Linux Foundation que permite desarrollar dispositivos embebidos conectados, eficientes y escalables, facilitando el paso de prototipo a producto final con una arquitectura mantenible.

23/02/2026

Enrique Casado Díez

LoRa y LoRaWAN son tecnologías clave en el ecosistema IoT cuando se requiere largo alcance y bajo consumo energético. En este artículo analizamos su funcionamiento, Spreading Factor, link budget, arquitectura de red, frecuencias y clases de dispositivos, con un caso práctico real.

19/02/2026

Juan José Díaz Antuña

Copilot Chat es la forma más sencilla y segura de empezar a usar IA en Microsoft 365. En este artículo vemos cómo funciona, cómo activarlo y en qué se diferencia de Microsoft 365 Copilot, Copilot Studio y los Agentes Inteligentes, con ejemplos prácticos y una comparativa clara.