Reportes
1. CONTENIDO
1.1. Instalación de iReport en NetBeans
Una de las mejores soluciones en Netbeans a la hora de crear informes es usar JasperReports pero antes de poder crearlos debemos tenerlo todo preparado y listo para usarlo, en esta ocasión explicaré la que a mi juicio es la mejor forma de tenerlo todo atado. Necesitaremos instalar el plugin iReport para Netbeans, que nos ayudará en el diseño del informe que tengamos que elaborar, además prepararemos las librerías esenciales para poder usar las clases necesarias en nuestros proyectos.
A continuación los pasos detallados.
Primer paso. Instalación del plugin iReport.
Bajaremos la última versión que encontremos del plugin iReport de la web oficial de Netbeans.
5. CONCLUSIONES
6. APRECIACIÓN DEL EQUIPO
1.1. Instalación de iReport en NetBeans
Una de las mejores soluciones en Netbeans a la hora de crear informes es usar JasperReports pero antes de poder crearlos debemos tenerlo todo preparado y listo para usarlo, en esta ocasión explicaré la que a mi juicio es la mejor forma de tenerlo todo atado. Necesitaremos instalar el plugin iReport para Netbeans, que nos ayudará en el diseño del informe que tengamos que elaborar, además prepararemos las librerías esenciales para poder usar las clases necesarias en nuestros proyectos.
A continuación los pasos detallados.
Primer paso. Instalación del plugin iReport.
Bajaremos la última versión que encontremos del plugin iReport de la web oficial de Netbeans.
Una vez descargado lo descomprimiremos y tendremos la siguiente estructura de archivos:
${distro.zipfilename.extensions}.nbm
iReport-5.5.0.nbm
jasperreports-components-plugin-5.5.0.nbm
jasperserver-plugin-5.5.0.nbm
Ya en NetBeans deberemos instalar el plugin. Para ello en la barra de menús nos moveremos a Herramientas ->Plugins
Se nos abrirá una nueva ventana donde añadiremos el plugin descargado. Nos moveremos a Descargados ->Agregar Plugins
Tras esto nos quedará buscar la ruta donde descomprimimos el plugin y agregar todos los plugins e iniciar la instalación pulsando el botón “Instalar”.
Después de seguir los simples pasos de la instalación tendremos el plugin instalado.
1.2. Configuración de DataSource
Crearemos un "datasource" en iReport para poder
acceder a nuestros datos y hacer pruebas directamente, sin necesidad de una
aplicación Java (por el momento). Para crear este datasource hacemos clic en el
ícono "Report Datasources" ubicado en la barra de herramientas de
iReport:
Con lo
que se abrirá la ventana de "Connections / Datasources" que en este
momento debe contener solo un "Empty datasource" y la conexión a una
base de datos de prueba en HSQLDB. Ahora hacemos clic en el botón
"New" para crear nuestro nuevo datasource.
En la nueva ventana que se abre seleccionamos
"Database JDBC connection" y presionamos el botón "Next".
En la siguiente ventana debemos proporcionar algunos datos como el nombre se le
dará al datasource y los datos para realizar la conexión de la base de datos.
Después de llenar estos datos su ventana debe haber quedado más o menos como la
siguiente (recuerden usar el "JDBC Driver" que corresponda al
manejador de base de datos que estén usando:
Antes de guardar esta configuración hagan clic en el botón
"Test" para probar que todos los datos proporcionados son correctos.
Si todo ha salido bien, al hacer clic en el botón "Save" la ventana
actual debe cerrarse y nuestro datasource debe estar ahora en la ventana
"Connections / Datasources".
1.3. Creación de reportes usando Wizard, archivo jrxml
Ahora crearemos nuestro primer reporte utilizando el Wizard de iReport para lo cual vamos al menú “File -> New” y en la parte inferior derecha damos clic en Launch Report Wizard.
A continuación seguiremos una serie de pasos guiada por el Wizard:
- Colocar el nombre y la ruta del archivo .jxrml de nuestro reporte.
- Diseñamos el Query con los campos necesario para nuestro reporte Ejemplo: “SELECT * FROM estudiante” y damos clic en siguiente.
- Seleccionamos todos los campos y damos clic en siguiente.
- Por ultimo agrupamos los campos de ser necesario sino damos clic en terminar.
Ahora tenemos creada nuestra plantilla solo falta realizar un diseño de acuerdo a nuestro gusto o el requerimiento del proyecto, yo la hare sencilla para el objetivo de esta prueba.
En la parte derecha encotramos la paleta y todos los elementos disponibles para nuestro diseño para este caso solo usare los elementos: Static Text y TextField. (En los TextField dar clic derecho en edit expression y escoger el campo adecuado a mostrar).
Una vez finalizado el diseño damos clic en preview esperamos que compile el .jrxml y se nos abrira automaticamente el documento .pdf (cabe mencionar que tambien se puede exportar otros formatos de documentos).
Ahora crearemos un nuevo proyecto en NetBeans. Para esto vamos al menú “File -> new Project”. En la ventana de nuevos proyectos seleccionamos la categoría “Java” y de tipo de proyecto seleccionamos “Java Application” y hacemos clic en el botón “Next”, luego colocamos el nombre del proyecto y seleccionamos el check Create Main Class y damos clic en finish.
1.4. Campos calculados en iReport.
Paso 1: Creamos un nuevo Reporte, Seleccionamos nuestra Base de
Datos, las tablas o visitas; de las cuales queremos elaborar dicho reporte y
nos mostrara la siguiente ventana.
Paso 2: Seleccionamos los campos que son necesarios para mi Reporte, y vamos arrastrando uno a uno hacia la fila que dice “Detalle”; automáticamente irán apareciendo los nombres del encabezado de cada columna de esta manera cómo podemos ver en la imagen.
Paso 3: Arrastramos el campo para el cual deseamos hacer un campo calculado en nuestro reporte y lo arrastramos hacia la fila de dice “Page Footer”, en este caso se realizará la suma total de todos los sueldos, de un empleado, como podemos visualizar en la imagen.
Paso 4: Como proceso final si podemos ver en esta visualización de nuestro reporte, en donde apunta la flecha del cursor, notamos que hay un campo calculado del Total de todos los sueldos. Observemos.
1.5. Ejecución de reportes, archivo jasper
Paso 3: Arrastramos el campo para el cual deseamos hacer un campo calculado en nuestro reporte y lo arrastramos hacia la fila de dice “Page Footer”, en este caso se realizará la suma total de todos los sueldos, de un empleado, como podemos visualizar en la imagen.
Paso 4: Como proceso final si podemos ver en esta visualización de nuestro reporte, en donde apunta la flecha del cursor, notamos que hay un campo calculado del Total de todos los sueldos. Observemos.
1.5. Ejecución de reportes, archivo jasper
Bien para ejecutar un reporte desde NetBeans hagan lo siguiente:
Den de alta un JFrame Form dentro de su proyecto, clic derecho sobre su package principal eligen New – JFrame Form, yo lo llamaré muestraReporte.
Dentro de nuestro JFrame, creamos un botón que es el que va a llamar a nuestro reporte, para esto del lado derecho tenemos el Swing Controls, clic sobre button y vuelves a dar clic sobre el form para que se inserte.
Después haz doble clic sobre el botón para que cree el evento actionPerformed, que es el evento que le indicará al nuestra aplicación que es lo que se hará si se oprime el botón.Ahora ingresaremos el siguiente código y te lo explico abajo.
Primero si te das cuenta tenemos las librerías que vamos a ocupar y que antes ya importamos, si no lo has hecho checa este post, haz clic aqui.
Después damos de alta nuestro JDialog para indicar que desde una nueva ventana se abrirá nuestro reporte.
Enseguida se da de alta la conexión a la base de datos, yo lo llamo como conexion.conexion por que la primera conexion quiere decir que es mi Package y la segunda conexion quiere decir que es mi Clase, si tienes dudas, verifica este post, haz clic aquí.
Veamos el código que va dentro de nuestro botón.
Bien, la primera línea JasperReport, indica el reporte que quiero abrir, en este caso mi reporte se llama mireporte.jrxml,
La siguiente línea, le indicará al reporteador que va a imprimir, fijate que dentro de JasperFillManager.fillReport hay 3 parametros, te explico para que son, el primero esta indicando que reporte vamos a abrir, el segundo será los parametros que vamos a pasar al reporte (por si la consulta (query) de tu reporte necesita valores adicionales para ejecutarse, esto lo veremos en otro post) y el último parámetro es la conexión a nuestra base de datos.
Las siguientes líneas:
viewer.setSize(1000,700); .- Indicamos el ancho y largo de nuestra ventana que contendrá el reporte.
viewer.setLocationRelativeTo(null); .- Con este código centramos nuestra ventana en el monitor.
JRViewer jrv = new JRViewer(jasperPrint);
viewer.getContentPane().add(jrv); .- Con estas líneas se prepara el reporte para la vista previa.
viewer.setVisible(true);.- Con esta línea hacemos visible la ventana que tiene nuestro reporte
Ahora ejecuta tu JFrame, clic derecho a tu JFrame – Run File..
1.6. Enlace de reporte con ventana JDialog. Uso de JasperViewer - Ejemplos
Los JDialog admiten un padre y pueden ser o no modales. ¿Para qué sirve ese padre? ¿Puedo hacer cualquier JDialog modal?
Otras veces queremos hacer una ventana de error, de aviso, para pedir un dato o confirmar algo. ¿Pongo JFrame o JDialog para esas ventanas? ¿Tengo que construirla?
Vamos a tratar en este tutorial de echar un vistazo a JFrame y JDialog, así como a JOptionPane y ver cuándo usamos una u otra. Trataremos de responder a todas estas preguntas.
JFrame y JDialog
Los dos tipos de ventanas principales que tenemos en java son JFrame y JDialog. Hay varias diferencias entre ellas y en función de estas diferencias vamos a ver para qué sirven
Si instanciamos un JFrame, en la barra de abajo de windows (creo que se llama "barra de herramientas") nos aparece un nuevo "botoncito" correspondiente a nuestra aplicación. Si instanciamos un JDialog, no aparece nada.
Un JFrame tiene un método setIconImage() para cambiar el icono por defecto de la taza de café. JDialog no tiene este método.
Un JDialog admite otra ventana (JFrame o JDialog) como padre en el constructor. JFrame no admite padres.
Un JDialog puede ser modal, un JFrame no.
Todo esto nos indica lo siguiente:
Un JFrame debe ser la ventana principal de nuestra aplicación y sólo debe haber una.
Las ventanas secundarias de nuestra aplicación deben ser JDialog.
Los motivos de esto son los siguientes.
Al mostrar el JFrame un botón en la barra de herramientas de windows y tener método para cambiar el icono, es la ventana ideal como ventana principal de nuestra aplicación y sólo debe haber una. Nos permite cambiar el icono y sólo debe haber un botón en la barra de herramientas de windows para nuestra aplicación.
Si usamos un JDialog como ventana principal, no tenemos botón en la barra de herramientas y no hay forma fácil de cambiarle el icono.
Los JDialog son ideales para ventanas secundarias porque admiten una ventana padre. Si la VentanaA es padre del JDialogB, entonces el JDialogB siempre estará por delante de VentanaA, nunca quedará por detrás. Lo ideal es que hagamos nuestras ventanas secundarias como JDialog cuyo padre sea el JFrame principal. De esta forma los JDialog siempre serán visibles por encima del JFrame y no se irán detrás ni quedarán ocultos por el JFrame.
Otra ventaja de admitir un padre es que heredan el icono de él. Si hemos cambiado el icono del JFrame con el método setIconImage(), entonces todos los JDialog que hagamos como hijos de este JFrame heredarán el icono. Todas las ventanas de nuestra aplicación tendrán el mismo icono en lugar de la taza de café por defecto.
Estos componentes hacen parte del paquete javax.swing, básicamente nos permiten crear Ventanas para nuestras aplicaciones y en ellas alojar otros componentes para darle cuerpo a la interfaz de usuario, en si tienen comportamientos similares y a simple vista pueden parecer iguales, pero son componentes distintos.
Un JFrame permite crear una ventana con ciertas características, por ejemplo podemos visualizarla en nuestra barra de tareas, caso contrario de los JDialog, ya que estos últimos son Ventanas de Dialogo con un comportamiento diferente, no se puede ver la ventana en la barra de tareas ni posee los botones comunes de maximizar o minimizar....
Los JDialog pueden ser hijos de JFrames o de otros JDialog mientras que los JFrame no (Como así Hijos?), es decir, si tenemos claros conceptos de programación Orientada a Objetos podemos relacionar esto de Hijos con el concepto de Herencia (Aunque no directamente, es mas a nivel conceptual), con estos componentes podemos hacer que una Ventana sea Padre de otra Ventana de tipo JDialog, asignándole algún tipo de comportamiento o dejando la ventana padre como Principal.
Es recomendable cuando trabajemos con GUI's crear un único JFrame para toda la aplicación y el resto de ventanas podemos trabajarlas como JDialog ya que de esa manera evitamos que se creen varias ventanas independientes y en vez de eso otras dependientes de la principal.
Podemos encontrar muchas consideraciones sobre estos componentes pero lo anterior es básicamente lo que necesitamos saber en términos generales.
Uso de JasperViewer
Los JDialog admiten un padre y pueden ser o no modales. ¿Para qué sirve ese padre? ¿Puedo hacer cualquier JDialog modal?
Otras veces queremos hacer una ventana de error, de aviso, para pedir un dato o confirmar algo. ¿Pongo JFrame o JDialog para esas ventanas? ¿Tengo que construirla?
Vamos a tratar en este tutorial de echar un vistazo a JFrame y JDialog, así como a JOptionPane y ver cuándo usamos una u otra. Trataremos de responder a todas estas preguntas.
JFrame y JDialog
Los dos tipos de ventanas principales que tenemos en java son JFrame y JDialog. Hay varias diferencias entre ellas y en función de estas diferencias vamos a ver para qué sirven
Si instanciamos un JFrame, en la barra de abajo de windows (creo que se llama "barra de herramientas") nos aparece un nuevo "botoncito" correspondiente a nuestra aplicación. Si instanciamos un JDialog, no aparece nada.
Un JFrame tiene un método setIconImage() para cambiar el icono por defecto de la taza de café. JDialog no tiene este método.
Un JDialog admite otra ventana (JFrame o JDialog) como padre en el constructor. JFrame no admite padres.
Un JDialog puede ser modal, un JFrame no.
Todo esto nos indica lo siguiente:
Un JFrame debe ser la ventana principal de nuestra aplicación y sólo debe haber una.
Las ventanas secundarias de nuestra aplicación deben ser JDialog.
Los motivos de esto son los siguientes.
Al mostrar el JFrame un botón en la barra de herramientas de windows y tener método para cambiar el icono, es la ventana ideal como ventana principal de nuestra aplicación y sólo debe haber una. Nos permite cambiar el icono y sólo debe haber un botón en la barra de herramientas de windows para nuestra aplicación.
Si usamos un JDialog como ventana principal, no tenemos botón en la barra de herramientas y no hay forma fácil de cambiarle el icono.
Los JDialog son ideales para ventanas secundarias porque admiten una ventana padre. Si la VentanaA es padre del JDialogB, entonces el JDialogB siempre estará por delante de VentanaA, nunca quedará por detrás. Lo ideal es que hagamos nuestras ventanas secundarias como JDialog cuyo padre sea el JFrame principal. De esta forma los JDialog siempre serán visibles por encima del JFrame y no se irán detrás ni quedarán ocultos por el JFrame.
Otra ventaja de admitir un padre es que heredan el icono de él. Si hemos cambiado el icono del JFrame con el método setIconImage(), entonces todos los JDialog que hagamos como hijos de este JFrame heredarán el icono. Todas las ventanas de nuestra aplicación tendrán el mismo icono en lugar de la taza de café por defecto.
Estos componentes hacen parte del paquete javax.swing, básicamente nos permiten crear Ventanas para nuestras aplicaciones y en ellas alojar otros componentes para darle cuerpo a la interfaz de usuario, en si tienen comportamientos similares y a simple vista pueden parecer iguales, pero son componentes distintos.
Un JFrame permite crear una ventana con ciertas características, por ejemplo podemos visualizarla en nuestra barra de tareas, caso contrario de los JDialog, ya que estos últimos son Ventanas de Dialogo con un comportamiento diferente, no se puede ver la ventana en la barra de tareas ni posee los botones comunes de maximizar o minimizar....
Los JDialog pueden ser hijos de JFrames o de otros JDialog mientras que los JFrame no (Como así Hijos?), es decir, si tenemos claros conceptos de programación Orientada a Objetos podemos relacionar esto de Hijos con el concepto de Herencia (Aunque no directamente, es mas a nivel conceptual), con estos componentes podemos hacer que una Ventana sea Padre de otra Ventana de tipo JDialog, asignándole algún tipo de comportamiento o dejando la ventana padre como Principal.
Es recomendable cuando trabajemos con GUI's crear un único JFrame para toda la aplicación y el resto de ventanas podemos trabajarlas como JDialog ya que de esa manera evitamos que se creen varias ventanas independientes y en vez de eso otras dependientes de la principal.
Podemos encontrar muchas consideraciones sobre estos componentes pero lo anterior es básicamente lo que necesitamos saber en términos generales.
Uso de JasperViewer
Los reportes son otras de las utilidades más importantes en las aplicaciones ya que su función es dar al usuario información ordenada y limpia así como un formato adecuado para poder ser llevado a impresión o almacenarlo en algún tipo de fichero como .doc, .odt, pdf, etc.
Recuerdo que hace muchos post anteriores hablé sobre JasperReports, una herramienta Open Source para emitir reportes en Java. Pueden usarlo externamente descargándolo desde jasperforge, o instalar el complemento en netbeans como se explicó en el post mencionado (Instalación de JasperReports).
El siguiente paso es realizar el reporte, que no es nada complicado, basta con establecer la conexión a la base de datos que deseemos, arrastrar los campos de las tablas que necesitemos y ordenarlos, darle un formato decente y ya está, al guardarlo debe generarse un fichero .jrxml, al cual invocaremos desde nuestro código fuente.
Antes de continuar, debemos contar en el proyecto con la librería:
Si antes se instaló el JasperReports es posible que la librería ya lo tengamos en el ordenador, incluso el IDE de desarrollo lo tiene indexado, solo deberá ser añadido a proyecto.
Otras de la librerías que necesitaremos están comentados en el encabezado del código de Ejemplo.
El siguiente procedimiento va a recibir como parámetro la ubicación del reporte dentro del proyecto, para ello será necesario incluir los reportes en algún directorio dentro del proyecto en el que trabajamos
1.6.1. EjemplosJDialog
public
class
VentanaConfirmacion
extends
JDialog
{
private
Container contenedor;
public
VentanaConfirmacion(){
contenedor=getContentPane();
contenedor.setLayout(
null
);
//Asigna un titulo a la barra de titulo
setTitle(
"CoDejaVu : Titulo Del JDialog"
);
//tamaño de la ventana
setSize(
300
,
200
);
//pone la ventana en el Centro de la pantalla
setLocationRelativeTo(
null
);
}
}
JFrame
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
public class EjemploJFrame extends JFrame {
private JPanel contentPane;
// METODO PRINCIPAL QUE ARRANCA TODA LA APLICACIÓN
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
// crea el JFrame
EjemploJFrame frame = new EjemploJFrame();
// lo hace visible
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
// EL CONSTRUCTOR QUE SE USA CUANDO ARRANCA AQUÍ ARRIBA
public EjemploJFrame() {
// el titulo de la ventana
setTitle("Swing: Jugando con las ventanas by jnj");
// acción al cerrar el frame: sale del programa
// en éste caso, terminando la ejecución
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// posición de las esquinas del formulario en tu escritorio
setBounds(100, 100, 450, 433);
// el panel que contiene todo
contentPane = new JPanel();
// borde del panel
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
// se pone el panel en la ventana
setContentPane(contentPane);
// se establece disposición de las capas a null
// para poder posicionar por coordenadas los componentes
// ésto se hace con un Absolute Layout que se llama
// en el diseñador visual
contentPane.setLayout(null);
// el botón que abre ventanas de diálogo
JButton btnAbrirUnaVentana = new JButton(
"Abrir una ventana de diu00E1logo con el usuario");
btnAbrirUnaVentana.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
EjemploJDialog dialogo = new EjemploJDialog();
dialogo.setVisible(true);
}
});
btnAbrirUnaVentana.setBounds(10, 11, 414, 23);
contentPane.add(btnAbrirUnaVentana);
// el botón que abre ventanas de diálogo
// pero de manera MODAL
JButton btnAbrirUnaVentana_1 = new JButton(
"Abrir una ventana de diu00E1logo MODAL");
btnAbrirUnaVentana_1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
EjemploJDialog dialogo = new EjemploJDialog();
dialogo.setModal(true);
dialogo.setVisible(true);
}
});
btnAbrirUnaVentana_1.setBounds(10, 70, 414, 23);
contentPane.add(btnAbrirUnaVentana_1);
JLabel lblSiLaAbrimos = new JLabel(
"Si la abrimos modal, hasta no cerrarla no podemos tocar u00E9sta ventana.");
lblSiLaAbrimos.setBounds(10, 45, 414, 14);
contentPane.add(lblSiLaAbrimos);
// el panel-escritorio donde veremos los JFrames internos
final JDesktopPane desktopPane = new JDesktopPane();
desktopPane.setBounds(10, 138, 414, 246);
contentPane.add(desktopPane);
// botón para abrir las ventanas internas
JButton btnAbrirUnJframe = new JButton(
"Abrir un JFrame interno aquu00ED abajo");
btnAbrirUnJframe.addActionListener(new ActionListener() {
// variable para que cada nueva ventana interna
// salga en diferente posición y se vean todas
int posicioninicial = 0;
public void actionPerformed(ActionEvent e) {
EjemploJInternalFrame jif = new EjemploJInternalFrame();
jif.setVisible(true);
// posición de la nueva ventana
jif.setLocation(posicioninicial, posicioninicial);
// las siguiente posición será diferente así
// veremos todas las ventanas internas
posicioninicial += 10;
desktopPane.add(jif);
}
});
btnAbrirUnJframe.setBounds(10, 104, 414, 23);
contentPane.add(btnAbrirUnJframe);
}
}
JDialog
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.border.EmptyBorder;
// AQUÍ EMPIEZA LA CLASE
public class EjemploJDialog extends JDialog {
private final JPanel contentPanel = new JPanel();
/* ESTO LO GENERA ECLIPSE PARA PROBAR MIENTRAS CONSTRUIMOS
* EL DIALOGO, LO PODEMOS DESCOMENTAR PARA
* PROBAR EL DIÁLOGO SIN PROBAR TODA LA APLICACIÓN COMPLETA
public static void main(String[] args) {
try {
EjemploJDialog dialog = new EjemploJDialog();
dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
dialog.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}*/
// CONSTRUCTOR DE LA CLASE
// crea la ventana, con los bordes, botones,
// y todos los componentes internos para hacer lo que
// se pretenda con éste diálogo.
public EjemploJDialog() {
// evita cambio de tamaño
setResizable(false);
// título del diáolog
setTitle("u00C9sto es una ventana de diu00E1logo");
// dimensiones que ocupa en la pantalla
setBounds(100, 100, 450, 229);
// capa que contendrá todo
getContentPane().setLayout(new BorderLayout());
// borde de la ventan
contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
// pone el panel centrado
getContentPane().add(contentPanel, BorderLayout.CENTER);
// sin capas para poder posicionar los elementos por coordenadas
contentPanel.setLayout(null);
{
// aquí se pone el JTextArea dentro de un JScrollPane
// para que tenga barras de desplazamiento
JScrollPane scrollPane = new JScrollPane();
scrollPane.setBounds(10, 11, 424, 146);
contentPanel.add(scrollPane);
{
JTextArea txtrstoEsUn = new JTextArea();
txtrstoEsUn.setText("u00C9sto es un JTextArea, aquu00ED podemos poner un texto de varias lu00EDneas.rn1rn2rn3rn..rnrnObserva que no se ve en la barra de tareas que exista u00E9sta ventana. Si fuera un JFrame su00ED que se veru00EDa en la barra de tareas con el texto del tu00EDtulo de la ventana...rnrnEl componente JTextArea estu00E1 dentro de un JScrollPane para que se visualizen las barras de scroll cuando sea necesario.rnrnLa ventana tiene el atributo 'resizable' a 'false' para evitar que se pueda cambiar el tamau00F1o.rnrnrnrnrnrnFin del texto.");
txtrstoEsUn.setLineWrap(true);
txtrstoEsUn.setAutoscrolls(true);
scrollPane.setViewportView(txtrstoEsUn);
}
}
{
// a continuación tenemos los botones clásicos 'Vale' y 'Cancela'
// éste código lo ha generado Eclipse...
JPanel buttonPane = new JPanel();
buttonPane.setLayout(new FlowLayout(FlowLayout.RIGHT));
getContentPane().add(buttonPane, BorderLayout.SOUTH);
{
JButton okButton = new JButton("Vale");
okButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// aquí van las acciones al hacer click en Vale
// envía el diálogo al recolector de basura de Java
dispose();
}
});
okButton.setActionCommand("Vale");
buttonPane.add(okButton);
getRootPane().setDefaultButton(okButton);
}
{
JButton cancelButton = new JButton("Cancelar");
cancelButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
// aquí van las acciones al hacer click en Vale
// envía el diálogo al recolector de basura de Java
dispose();
}
});
cancelButton.setActionCommand("Cancelar");
buttonPane.add(cancelButton);
}
}
}
}
La clase tiene como nombre Modulo()
public class Modulo {
private final static Logger LOGGER = Logger.getLogger(Modulo.class.getName()); //Es muy importante el uso del LOGGER para poder mostrar mensajes y no el famoso System.out.print();
String Driver="sun.jdbc.odbc.JdbcOdbcDriver";
String URL="jdbc:odbc:Driver=Microsoft Access Driver (*.mdb);DBQ=C:/DataBase.mdb"; //Aquí deberían cambiar según el motor de base de datos que usan.
String User="Administrador";
String Password="pass";
public Connection getConexionBD(){
Connection cn = null;
try {
Class.forName(Driver).newInstance();
cn=DriverManager.getConnection(URL,User,Password);
LOGGER.info("Se conecto!");
} catch (Exception e) {
LOGGER.warning(e.getMessage());
}
return cn; //Retorna la conexion
}
}
En esta clase tenemos un metodo llamado MostrarReporteViewer(), recibe como parametros la ruta donde esta nuestro reporte .jasper y los parametros del reporte.
public class Reportes {
Connection cn=null;
public void MostrarReporteViewer(String Ruta,Map parametros){
try {
BasicConfigurator.configure();
Modulo obj = new Modulo();
cn=obj.getConexionBD();
JasperReport reporte = (JasperReport) JRLoader.loadObject(Ruta);
////////////////////////////////////
parametros.put(JRParameter.REPORT_LOCALE, Locale.US);
//Esta línea es muy importante si el formato de los números de tu país es “999,999.00”,
//el IReport te mostrara por default “999.999,00”, con esta simple línea podrás solucionar ese problema.
////////////////////////////////////
JasperPrint jasperPrint = JasperFillManager.fillReport(reporte,parametros, cn);
JasperViewer jviewer=new JasperViewer(jasperPrint,false);
jviewer.setTitle("");
jviewer.setVisible(true);
cn.close();
} catch (JRException ex) {
JOptionPane.showMessageDialog(null,"Problemas al Diseñar el reporte");
} catch (SQLException ex) {
JOptionPane.showMessageDialog(null,"Problemas en la BD");
}
}
}
public class Asistentes {
private Integer id;
private String nombre;
private String apellidos;
private String dni;
public Asistentes(){
}
public Asistentes(int id, String nombre, String apellidos, String dni) {
this.id = id;
this.nombre = nombre;
this.apellidos = apellidos;
this.dni = dni;
}
public int getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getApellidos() {
return apellidos;
}
public void setApellidos(String apellidos) {
this.apellidos = apellidos;
}
public String getDni() {
return dni;
}
public void setDni(String dni) {
this.dni = dni;
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
}
2. RESUMEN
Jasper Report es
una librería para la generación de informes. Está escrita en java y es
libre. http://jasperforge.org/ El funcionamiento consiste en
escribir un xml donde se recogen las particularidades del informe. Este xml lo
tratan las clases del Jasper para obtener una salida que pueden ser un PDF,
XML, HTML, CSV, XLS, RTF, TXT.
Para generar el
xml, o el compilado .jasper les recomiendo descargar la herramienta iReport que
es un Entorno Gráfico que está implementado en java y se integra perfectamente
con el Jasper Report http://jasperforge.org/sf/projects/ireport.
Aunque JasperReports se utiliza
principalmente para capacidades de reporte a las aplicaciones basadas en la Web
a través de la API de Servlet, no tiene absolutamente ninguna dependencia de la
API Servlet o cualquier otra biblioteca de Java EE. No hay nada que nos impida
la creación de aplicaciones de escritorio Java para generar informes con
JasperReports.
JasperReports nos permite separar los
datos en secciones. Estas secciones incluyen:
·El título del informe, que aparecerá
una vez en la parte superior del informe.
·Un encabezado de página, que
aparecerá en la parte superior de cada página.
·Una sección de detalle, que
normalmente contiene los datos de los informe primarios.
·A pie de página, que aparecerá en la
parte inferior de cada página.
·Una sección de resumen, que aparecerá
al final del informe.
En cuanto al Data Sourse Una de las configuraciones más habituales con las que nos encontraremos en una aplicación web es el acceso a una o varias bases de datos. La forma habitual de configurar un acceso a base de datos es creando en el servidor un Pool de conexiones que serán reutilizadas y gestionadas por el servidor, y publicarlo como un recurso JNDI. Una vez publicado como recursos JNDI cualquier aplicación desplegada en ese servidor tendrá acceso al pool de conexiones.
Para ello el objeto principal que utilizaremos para configurar el pool de conexiones y publicarlo como recurso JNDI será el javax.sql.DataSource.
La configuración de un pool de conexiones y publicación como recurso JNDI en un Tomcat, WebSphere, Jboss etc es diferente. La forma mas habitual es hacerlo con la interface de administración de cada uno de los contenedores (servidores) y una vez tenemos el nombre JNDI del recurso, la configuración de la aplicación es la misma para todos los servidores, ya que la aplicación hace uso del DataSource utilizando el nombre JNDI referenciado en el fichero de descripción de despliegue o web.xml (Deployment Description).
En este articulo vamos a centrarnos en la configuración de Oracle, la cual no es muy diferente a cualquier otra base de datos como MySql, MariaDB etc.
Para la Creación de reportes usando Wizard, Primero comensaremos creando un nuevo proyecto Java standalone en NetBeans (File -> New Project... -> Java -> Java Application), le asignamos un nombre (que en mi caso será ReporteGrafica) y presionamos el botón "Finish" para que el nuevo proyecto se genere y veamos en el editor nuestra clase Main. Agregamos al nodo "Libraries" de nuestro proyecto la biblioteca "JasperReports" que creamos en la primer parte del tutorial y el jar "commons-logging-1.1.1.jar",como lo hemos venido haciendo hasta ahora.Adicionalmente debemos agregar dos jars más que nos permitirán generar las gráficas. Puesto que JasperReports hace uso de JFreeChart para generar las gráficas debemos agregar dos de sus jars: 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 .zipanterior), solo deben agregarlos al nodo "Libraries" del proyecto.Ahora necesitamos, como en los casos anteriores, una clase cuyas instancias mantendrán los datos que mostraremos en el reporte. En este caso, como estamos hablando de consolas, creo que lo más adecuado es que esta sea una clase "Jugador". Así que agreguemos esta clase a nuestro proyecto.
Esta clase tendrá tan solo tres atributos: un id (que en este caso podría no ser necesario, pero es para no perder la costumbre, cuando veamos algo de Hibernate veremos que es mejor acostumbrarnos desde el prinicpio a poner este id), un nombre para distinguir al usuario, y el nombre de la consola que tiene (que es el dato que nos interesa para crear la gráfica).Los JDialog admiten un padre y pueden ser o no modales. ¿Para qué sirve ese padre? ¿Puedo hacer cualquier JDialog modal?
Otras veces queremos hacer una ventana de error, de aviso, para pedir un dato o confirmar algo. ¿Pongo JFrame o JDialog para esas ventanas? ¿Tengo que construirla?
Vamos a tratar en este tutorial de echar un vistazo a JFrame y JDialog, así como a JOptionPane y ver cuándo usamos una u otra. Trataremos de responder a todas estas preguntas.
Los reportes son otras de las utilidades más importantes en las aplicaciones ya que su función es dar al usuario información ordenada y limpia así como un formato adecuado para poder ser llevado a impresión o almacenarlo en algún tipo de fichero como .doc, .odt, pdf, etc.
Recuerdo que hace muchos post anteriores hablé sobre JasperReports, una herramienta Open Source para emitir reportes en Java. Pueden usarlo externamente descargándolo desde jasperforge, o instalar el complemento en netbeans como se explicó en el post mencionado (Instalación de JasperReports).
3. SUMMARY
Jasper Report is
a library for the generation of reports. It is written in java and is free.
http://jasperforge.org/ The operation consists in writing an xml where the
particularities of the report are collected. This xml is treated by the Jasper
classes to obtain an output that can be PDF, XML, HTML, CSV, XLS, RTF, TXT.
To generate the
xml, or the .jasper compiled, I recommend downloading the iReport tool, which
is a Graphical Environment that is implemented in java and integrates perfectly
with the Jasper Report http://jasperforge.org/sf/projects/ireport.
Although
JasperReports is primarily used for reporting capabilities to Web-based
applications through the Servlet API, it has absolutely no dependency on the
Servlet API or any other Java EE library. There is nothing stopping us from
creating Java desktop applications to generate reports with JasperReports.
JasperReports
allows us to separate the data into sections. These sections include:
· The title of
the report, which will appear once at the top of the report.
· A page header,
which will appear at the top of each page.
· A detail
section, which normally contains the data of the primary reports.
· Footnote,
which will appear at the bottom of each page.
· A summary
section, which will appear at the end of the report.
Regarding Data
Sourse One of the most common configurations that we will find in a web
application is access to one or several databases. The usual way to configure a
database access is to create in the server a pool of connections that will be
reused and managed by the server, and publish it as a JNDI resource. Once
published as JNDI resources, any application deployed on that server will have
access to the connection pool.
For this the main object that we will use to
configure the pool of connections and publish it as a JNDI resource will be the
javax.sql.DataSource. The configuration of a pool of connections and
publication as a JNDI resource in a Tomcat, WebSphere, Jboss etc is different.
The most usual way is to do it with the administration interface of each of the
containers (servers) and once we have the JNDI name of the resource, the
configuration of the application is the same for all the servers, since the
application makes use of the DataSource using the JNDI name referenced in the
deployment description file or web.xml (Deployment Description). In this
article we will focus on the configuration of Oracle, which is not very
different from any other database such as MySql, MariaDB etc. For the Creation
of reports using Wizard, First we will start creating a new Java standalone
project in NetBeans (File -> New Project ... -> Java -> Java
Application), assign a name (which in my case will be GraficaReport) and press
the "Finish" button so that the new project is generated and we see
in the editor our Main class. We added to the "Libraries" node of our
project the library "JasperReports" that we created in the first part
of the tutorial and the jar "commons-logging-1.1.1.jar", as we have
been doing so far. In addition we must add two jars more that will allow us to
generate the graphs. Since JasperReports makes use of JFreeChart to generate
the graphs we must add two of its jars: jfreechart.jar and jcommon.jar. If they
downloaded JasperReports in the .zip file that contains the support libraries
then they already have these jars (which are in the lib directory of the
.zipanterior), they should only add them to the "Libraries" node of
the project. Now we need, as in the cases above, a class whose instances will
maintain the data that we will show in the report. In this case, as we are
talking about consoles, I think that it is most appropriate that this is a
"Player" class. So let's add this class to our project.
This class will have only three attributes: an id (which in this case might not be necessary, but it is to not lose the habit, when we see something of Hibernate we will see that it is better to get used from the beginning to put this id), a name for distinguish the user, and the name of the console that has (which is the data that interests us to create the graph). JDialog admit a parent and may or may not be manners. What is that father for? Can I do any modal JDialog?
Other times we want to make a window of error, of warning, to request a data or to confirm something. Do I put JFrame or JDialog for those windows? Do I have to build it?
We will try in this tutorial to take a look at JFrame and JDialog, as well as JOptionPane and see when we use one or the other. We will try to answer all these questions.
The reports are other of the most important utilities in the applications since their function is to give the user neat and clean information as well as an adequate format to be able to be printed or stored in some type of file such as .doc, .odt, pdf , etc.
I remember many previous posts I talked about JasperReports, an Open Source tool to issue reports in Java. You can use it externally by downloading it from jasperforge, or install the add-on in netbeans as explained in the mentioned post (Installation of JasperReports).
4. RECOMENDACIÓN- Se recomienda tener una gran capacidad de entendimiento, bastante interés de investigar para el desarrollo de iReport en NetBeans.
- Tener una investigación más vasta de este contenido porque el reporte es un punto inexcusable al momento de desarrollar nuestro software permitiéndonos conocer ciertos aspectos del cliente Empresa.
- Ser precavidos al momento de instalar el iReport en NetBeans porque una proterva instalación traerá ramificaciones como no poder abrir su netBeans entre otros, les recomendamos seguir cada paso planteado en este block al momento de instalar su iReport.
- Según el software que el desarrollador programe será la profundidad de su reporte, si un programador desarrolla programas extremadamente avanzados recomendamos utilizar los framework que existen, ya que estos nos facilitan el trabajo y tendremos una mejor reputación de nuestros clientes por ende estaremos cumpliendo con los requerimientos planteados de ella, de lo contrario también puede utilizar framework pero eso es opcional.
Tras un escudriñamiento extenso concluimos los siguiente:
Como resultado de la investigación concluimos que la herramienta iReport es una herramienta visual que sirve para generar ficheros XML utilizando la herramienta de generación de informes JasperReport. El jasperReport es software libre que nos permite crear informes, donde los ficheros se definen en un xml para posteriormente ser compilado por las librerías JasperReports (.jasper), es competencia de Crystal reports en los usuarios windows.
Del mismo modo existe muchas herramientas, librerías, framework que nos permiten crear reportes en netbeens pero es necesario conocer las características de cada una de ellas.
También existen fuentes de datos quienes intervienen en el proceso de la creación de reportes como el DATASOURSE representa todo lo relativo a una fuente de datos configurada por el usuario para conectarse a una Base de datos. Es decir, por cada conexión que el usuario quiera establecer con algún(os) fabricante(s), tiene que especificar una serie de información que permitan al Controlador o Driver saber con qué fabricante(s) se tiene que conectar y la cadena de conexión que tiene que enviarle a dicho fabricante(s) para establecer la conexión con la fuente de datos ODBC accedida por el proveedor en cuestión.
Este wizard por otra parte es un asistente que permite la creación de reporte personalizado, mediante una interfaz paso a paso que ayuda al usuario en este propósito: nos ayudará a crear un reporte 100% funcional.
Podemos tambien concluir que el archivo jasper son archivos contienen el contenido de un informe guardado en un formato binario y compilado a partir de un archivo jrxml cuando hablamos de la ventanas que es la ventana jframe y jDialog los JDialog admiten un padre y pueden ser o no modales.
Por lo tanto la creación de reportes dentro de nuestro software es indispensable ya que es parte fundamental del programa.
Por lo tanto la creación de reportes dentro de nuestro software es indispensable ya que es parte fundamental del programa.
6. APRECIACIÓN DEL EQUIPO
Tras desarrolla el contenido de este tema aprendimos mucho
acerca de los reportes en netbeens más aun cuando desarrollamos puntos claves
como Instalación de iReport en NetBeans, Configuración de DataSource, Creación
de reportes usando Wizard, archivo jrxml, Campos calculados en iReport., Ejecución
de reportes, archivo jasper, Enlace de reporte con ventana JDialog, Uso de
JasperViewer y multiples ejemplos.
Todos estos temas tratados nos ayudaron a conocer mucho sobre
los reportes en netbeens comenzando desde la instalación hasta la ejecución de
ellas.
Para nosotros fue muy substancial hurgar este contenido
porque es indispensable al momento de desarrollar un software para una empresa
ya que es parte de los requerimientos de los clientes.
Por otra parte, tuvimos una investigación más desarrollada y
aclaramos algunas incertidumbres que apaleábamos con respecto a las librerías y
framework que se utiliza al momento de crear reportes, pero gracias a algunos
libros y paginas web correspondientes a este tema aclaramos nuestras oscilaciones,
para estar seguros de nuestras erudiciones que adquirido lo llevamos a la práctica
y no tuvimos ningún inconveniente software 10% funcional.
El reporte es parte del desarrollo de software, en su mayoría
en mundo del negocio es de gran ayuda para los clientes al momento de realizar
consultas o reportes, etc. Eso desde el punto de vista del cliente. Es por eso
que nosotros los desarrolladores de software debemos tener bastante cuidado al momento
de crear nuestros reportes.
Tener una investigación más profunda sobre los reportes ya
que es un tema demasiado amplio.
7. GLOSARIO DE TÉRMINOS
REPORTES: Ni menos
en los reportes. JasperReports es un framework bastante completo
para desarrollar reportes tanto web como desktop en Java.
Aunque el formato fuente de un reporte en JasperReports es un
archivo XML, existe una herramienta que permite crear un reporte de
manera visual. Su nombre: iReport.
NETBEANS: es un entorno de desarrollo integrado libre,
hecho principalmente para el lenguaje de programación Java. Existe además un
número importante de módulos para extenderlo. NetBeans IDE es un
producto libre y gratuito sin restricciones de uso.
JAVA: es un lenguaje de programación y una
plataforma informática comercializada por primera vez en 1995 por Sun
Microsystems. Hay muchas aplicaciones y sitios web que no funcionarán a menos
que tenga Java instalado y cada día se crean más.
CHECKBOX: es un elemento de interacción de la interfaz
gráfica de usuario (widget) del Sistema Operativo con el usuario, que permite a
éste hacer selecciones múltiples de un conjunto de opciones.
TEXTAREA : El elemento textarea representa un campo para la entrada de
texto
MULTILÍNEA. El control asociado a este campo es una caja de
texto que permite a los usuarios editar múltiples líneas de texto regular.
QUERY : string o, en español, cadena de consulta
es un término informático que se utiliza para hacer referencia a una
interacción con una base de datos.
NSA: National Security Agency. Agencia Nacional de Seguridad. Organismo americano para la seguridad, entre otras cosas, informática.
Packet internet Groper (PING) (Búsqueda de Direcciones de Internet: Programa que se utiliza para comprobar si un destino está disponible
PAP: Password Authentication Protocol. Protocolo de Autentificación por Password. Protocolo que permite al sistema verificar la identidad del otro punto de la conexión mediante password
PEM: Private Enhanced Mail. Correo Privado Mejorado. Sistema de correo con encriptación
PGP: Pretty Good Privacity. Paquete de encriptación basado en clave pública escrito por Phil Zimmerman.
POP: Protocolo de Oficina de Correos (Post Office Protocol) Programa cliente que se comunica con el servidor, identifica la presencia de nuevos mensajes, solicita la entre de los mismos.
PPP: Protocolo Punto a Punto (Point to Point Protocol). Implementación de TCP/IP por líneas seriales (como en el caso del módem). Es mas reciente y complejo que SLIP
Intranet: Una red privada dentro de una compañía u organización que utiliza el mismo software que se encuentra en Internet, pero que es solo para uso interno.
DATA SOURCE : Podemos usar esta anotación en una clase de
componente de aplicación, como un cliente de aplicación, servlet o EJB
(Enterprise Java Bean). Esta anotación define un objeto DataSource y
lo registra con JNDI.
JDIALOG : En una aplicación java con ventanas debería
haber un único JFrame, correspondiente a la ventana principal de la aplicación.
El resto de ventanas secundarias deberían ser JDialog.
COMPILA : Reunir
en un solo texto extractos o fragmentos de otras obras ya publicadas:
compilarán todos sus relatos en un solo tomo. inform. Traducir un lenguaje de
alto nivel a código absoluto o lenguaje binario.
CLASS : es una construcción que le permite crear sus
propios tipos personalizados agrupando las variables de otros tipos, métodos y
eventos. Una clase es como un plano. Define los datos y el comportamiento de un
tipo.
SQLEXCEPTION : La clase SQLException y sus subtipos proporcionan información acerca de los errores y avisos que se producen mientras se está accediendo a un origen de datos.
8. LINKOGRAFÍASQLEXCEPTION : La clase SQLException y sus subtipos proporcionan información acerca de los errores y avisos que se producen mientras se está accediendo a un origen de datos.
Comentarios
Publicar un comentario