Páginas

23/11/15

JLabel gradient background.

JLabel gradient background.

Realizar JLabel con color de fondo gradiente.




Algo que se ve muy bien en las aplicaciones de escritorio en Java, son los titulos con un color de fondo gradiente (JLabel Gradient Background), para hacerlo solo hay que sobreescribir el metodo void paintComponent(Graphics g) de la clase JComponent, recuerda que esta es la clase base para los componentes SWING.
Para lograr un color de fondo gradiente horizontal:
JLabel gradient background horizontal
JLabel Gradiente
Hay que implementar este codigo:
  JLabel label = new JLabel("...... DatoJava ......") {
   @Override
   protected void paintComponent(Graphics g) {
    Color colorFinal = new Color(255, 1, 1);
    
    Graphics2D graphics2d = (Graphics2D) g.create();
    graphics2d.setPaint(new GradientPaint(0, 0, getBackground(),
      getWidth(), 0, colorFinal));
    graphics2d.fillRect(0, 0, getWidth(), getHeight());
    graphics2d.dispose();
    
    super.paintComponent(g);
   }
  };
    
Para lograr un color de fondo gradiente vertical:
JLabel gradient background Vertical
JLabel Gradiente
Hay que implementar este codigo:
  JLabel label = new JLabel("...... DatoJava ......") {
   @Override
   public void setForeground(Color fg) {
    super.setForeground(fg.RED);
   }

   @Override
   protected void paintComponent(Graphics g) {
    LinearGradientPaint linearGradientPaint = new LinearGradientPaint(
      new Point(0, 10), new Point(0, getHeight()),
      new float[] { 0.240f, 0.250f }, new Color[] {
        Color.LIGHT_GRAY, Color.GRAY });

    Graphics2D graphics2d = (Graphics2D) g.create();
    graphics2d.setPaint(linearGradientPaint);
    graphics2d.fill(new Rectangle(0, 0, getWidth(), getHeight()));
    graphics2d.dispose();

    super.paintComponent(g);
   }
  };
    
Con esto podemos jugar y hacer varias cosas interesantes, por ejemplo:
JLabel gradient background Esquina
JLabel Esquina Gradiente
  JLabel label = new JLabel("...... DatoJava ......") {
   @Override
   protected void paintComponent(Graphics g) {
    LinearGradientPaint linearGradientPaint = new LinearGradientPaint(
      new Point(0, 10), new Point(10, getHeight()),
      new float[] { 0.240f, 0.250f }, new Color[] {
        Color.BLACK, getBackground() });

    Graphics2D graphics2d = (Graphics2D) g.create();
    graphics2d.setPaint(linearGradientPaint);
    graphics2d.fill(new Rectangle(0, 0, getWidth(), getHeight()));
    graphics2d.dispose();

    super.paintComponent(g);
   }
  };
    
JLabel gradient background Linea abajo
JLabel Linea Abajo
  JLabel label = new JLabel("...... DatoJava ......") {
   @Override
   protected void paintComponent(Graphics g) {
    LinearGradientPaint linearGradientPaint = new LinearGradientPaint(
      new Point(0, 25), new Point(0, getHeight()),
      new float[] { 0.240f, 0.250f }, new Color[] {
        getBackground(), Color.RED });

    Graphics2D graphics2d = (Graphics2D) g.create();
    graphics2d.setPaint(linearGradientPaint);
    graphics2d.fill(new Rectangle(0, 0, getWidth(), getHeight()));
    graphics2d.dispose();

    super.paintComponent(g);
   }
  };
    
JLabel gradient background linea abajo gradiente
JLabel Linea Abajo
  JLabel label = new JLabel("...... DatoJava ......") {
   @Override
   protected void paintComponent(Graphics g) {
    Color colorFinal = new Color(0, 0, 0);
    Graphics2D graphics2d = (Graphics2D) g.create();
    graphics2d.setPaint(new GradientPaint(0, 0, getBackground(),
      getWidth(), 0, colorFinal));
    graphics2d.fillRect(0, 25, getWidth(), getHeight());
    graphics2d.dispose();

    super.paintComponent(g);
   }
  };
    

20/11/15

JCalendar Java Swing Tutorial.

JCalendar Java Swing Tutorial

Tutorial del JCalendar con ejemplos, Java Swing.




JUnit Assume Tutorial. Que mejor manera de controlar la fecha que un usuario ingresa que con un calendario en donde con un simple clic ya obtengamos Año, Mes y Día, en Java Swing no trae por defecto un componente que facilite este comportamiento, así que por eso hay que descargar una librería externa llamada JCalendar, dicha librería tiene varias funcionalidades, podemos elegir desde un calendario la fecha completa, la fecha de hoy, elegir una fecha maxima o minima para seleccionar, elegir solo un día, año o mes... En fin en este Tutorial de JCalendar vamos hacer varios ejemplos con las funcionalidades que ofrece utilizando el IDE JBoss Developer Studio o eclipse.


17/11/15

Vaciar DefaultTableModel.

Vaciar DefaultTableModel.

Vaciar DefaultTableModel de un JTable. Quitar datos de un DefaultTableModel.




Cuando tenemos un JTable que utiliza DefaultTableModel muchas veces es necesario vaciar el JTable, en este caso hay que eliminar dato por dato del DefaultTableModel recorriéndolo de esta manera:
 int numDatos = defaultTableModel.getRowCount();
 for (int i = 0; i < numDatos; i++) {
  defaultTableModel.removeRow(0);
 }
 
Primero obtenemos el numero de datos que contiene el DefaultTableModel y después recorremos los datos con un bucle for para ir borrando el primer dato encontrado.

6/11/15

HSQLDB Tutorial

HSQLDB Tutorial.

Tutorial de HSQLDB con Java.




HyperSQL (HSQLDB) es una base de datos relacional, es hecha 100% en Java y corre en la maquina virtual de Java (JVM), hay muchas características que hacen de HSQLDB una base de datos atractiva para los desarrolladores, podemos usarla sin la necesidad de un servidor, para hacer pruebas en memoria utilizando la memoria RAM, es de código abierto, con solo importar el JAR a tu proyecto puedes comenzar a trabajar, bien sea para pruebas o para hacer funcionar tu aplicación en un ambiente de producción, claro que también trae su Database Manager en SWING para hacerle consultas a nuestras tablas por fuera de nuestra aplicación.

En este Tutorial vamos a centrarnos en el funcionamiento de HSQLDB desde Java. Lo que necesitamos es un IDE, en este caso yo utilizo JBoss Developer Studio o lo que es lo mismo eclipse y la última versión de HSQLDB que en este momento es la 2.3.3.


24/9/15

Enviar correo Java. JavaMail.

Enviar correo Java. JavaMail.

Tutorial para enviar correo desde Java. JavaMail.




Enviar correos desde Java es necesario en la mayoría de los sistemas, ya sea para utilizar la funcionalidad para notificar algún suceso, enviar alguna información, enviar correos masivos con promociones a tus clientes, enviar reportes adjuntos a quien sea necesario, puedes utilizar esto para hacer grandes cosas, en este Tutorial para enviar correos con JavaMail vamos hacer varios ejemplos básicos y así tu podrás utilizar la funcionalidad para el propósito que necesites. Para llevar a cabo este tutorial necesitas tener una cuenta de Gmail, desde la cual vamos a enviar los correos.


14/8/15

Diferencia entre override vs overload

Diferencia entre override vs overload

Diferencia entre override vs overload, como implementarlos.




Cuando estamos comenzando a programar en Java tendemos a confundirnos con muchos conceptos ya que algunos son muy parecidos, en este caso vamos hacer una breve explicación para ver cuáles son las diferencias entre override y overload, estos conceptos son súper importantes en la programación orientada a objetos, se utilizan mucho y son una buena práctica de programación.
Para comenzar vamos hablar acerca de sus conceptos, cuando nos referimos a override en Java, estamos hablando de la sobrescritura de un método, para sobrescribir un método en Java tenemos que tener una ClaseHija que herede mínimo un método de una ClasePadre, la necesidad de sobrescribir un método se presenta ya que el hecho de que una ClaseHija herede de una ClasePadre no quiere decir que tienen que hacer lo mismo, para entender mejor, el hecho de que un padre tenga la responsabilidad de trabajar en una empresa no quiere decir que el hijo tenga que trabajar en la misma empresa.
Para aplicar esto en Java necesitamos hacerlo así:
ClasePadre
public class ClasePadre {

 public String quienSoy() {
  return "Soy la clase padre";
 }

}
   
ClaseHija
public class ClaseHija extends ClasePadre {
 
 @Override
 public String quienSoy() {
  return "Soy la clase hija";
 }
   
Como vemos la ClaseHija tiene el mismo método que la ClasePadre con la anotación @Override, lo que nos indica que es un método que no puede cambiar al de la ClasePadre, ni más ni menos parámetros, ya que solo lo estamos sobrescribiendo.

Ahora bien, cuando hablamos de overload en Java, nos referimos a sobrecargar un método, esto lo aplicamos en los constructores de las clases ya que hay veces que necesitamos más de un constructor, y al momento de implementarlo lo que hacemos es ponerle el mismo nombre que los demás pero con distintos parámetros, también es una buena práctica de programación utilizarlo para métodos que en realidad hacen lo mismo, por ejemplo:
Tenemos un método que busca clientes en nuestra base de datos, ese método solo busca clientes por sexo pero necesitamos otro método que aparte de buscar clientes por sexo también sea por edad, y en si los métodos lo que hacen es buscar clientes, así que le ponemos el mismo nombre pero con distintos parámetros, para implementarlo solo necesitamos este bloque de código:
Constructores:
public class Persona {
 public String quienSoy() {
  return "Soy una persona";
 }

 public String quienSoy(String nombre) {
  return "Soy " + nombre;
 }

 public String quienSoy(String nombre, String apellido) {
  return "Soy " + nombre + " " + apellido;
 }
}
  
Metodos:
 public void buscarCliente(String Sexo) {
  // Implementacion
 }

 public void buscarCliente(String Sexo, int edad) {
  // Implementacion
 }

 public void buscarCliente(String Sexo, int edad, String empresa) {
  // Implementacion
 }
  
Como vemos estamos sobrecargando el constructor de la clase Persona, todo esto es muy fácil, poco a poco ve integrándolo en tus aplicaciones, no hay lugar para confusiones ya que los dos conceptos overload y override se aplican de distintas formas y no olvides la mayor diferencia entre los dos conceptos es que no hacen lo mismo, uno sobrescribe un metodo y el otro sobrecarga un metodo, este tema está muy ligado al Polimorfismo en Java, otro de los grandes pilares de la programación orientada a objetos.
Si te ayudo la entrada no olvides compartir el conocimiento aprendido y si tienes alguna sugerencia puedes comentar, suerte!!

11/8/15

Polimorfismo Java

Polimorfismo Java.

Polimorfismo Java, que es el polimorfismo y sus tipos.




El Polimorfismo es uno de los conceptos generales que van de la mano con la programación orientada a objetos OOP, en si el polimorfismo en Java se refiere a las distintas formas que puede tener una variable, objeto o método creado.
Hay dos tipos establecidos de polimorfismo:
  • El polimorfismo en tiempo de ejecución (runtime) o dinámico, que lo podemos implementar con la sobre escritura (overriding) de métodos.
  • El polimorfismo en tiempo de compilación (compile time) o estático, que lo podemos implementar en la sobrecarga (overloading) de métodos
Te puede interesar: Diferencias entre override y overload.

Hay una confusión entre algunas programadores a la hora de aceptar que la sobrecarga de métodos también es un Polimorfismo, básicamente si nos fijamos en el concepto se podría afirmar que si, ya que el mismo método puede tomar distintas formas dependiendo de los parámetros recibidos, como ya aclaramos un poco lo que es la teoría vamos aplicar los dos tipos de Polimorfismo en la práctica.

Polimorfismo en tiempo de ejecución (runtime), es el más usado y se podría implementar con dos clases hijas que hereden de una clase padre. Este es el diagrama de clases del ejemplo:
Polimorfismo Java
Polimorfismo Java

7/8/15

Ejemplo de un reporte pdf con iText desde Java.

Ejemplo de un reporte pdf con iText desde Java.

Como hacer un reporte pdf desde Java con iText 5.5.6. Ejemplo iText.




iText Dato Java icon iText pdf es una librería muy potente y fácil de usar para generar reportes desde Java , si lo que necesitas es hacer un reporte rápido, sencillo y sin muchas complicaciones esta es la librería para ti, solo la descargamos y la agregamos al proyecto, hay que recordar que la construcción del reporte pdf va ser enteramente en el código fuente Java a diferencia de Jasper Reports que utiliza archivos externos y después los invocamos desde el código. En este tutorial de iText vamos a generar un reporte pdf que tendrá algunas párrafos, listas, tablas y celdas para mostrar un poco las funcionalidades que podemos conseguir con la misma.

Vamos hacer una breve reseña de una cámara y sus características, este es el resultado que queremos conseguir:
Reporte pdf con iText
Reporte pdf con iText
Se ve chévere el ejemplo así que manos al teclado

18/6/15

ZapfDingbatsList symbol list images.

ZapfDingbatsList symbol list imágenes.

ZapfDingbatsList symbol list, todos los símbolos que puedes crear con esta lista.




Si estas utilizando lowagie iText para crear un PDF y necesitas crear una lista con un símbolo en especial pero no sabes cómo hacerlo, o no tienes idea de cuáles son los símbolos que puedes usar, en este Dato Java te traigo la lista de símbolos disponibles en ZapfDingbatsList, recuerda que para crear una lista en lowagie iText necesitas este bloque de codigo:
  com.lowagie.text.List list = (com.lowagie.text.List) new ZapfDingbatsList(51);
  list.add(new ListItem("Item 1"));
  list.add(new ListItem("Item 2"));
  list.add(new ListItem("Item 3"));
  list.add(new ListItem("Item 4"));

  document.add(list);
  
En el constructor de la lista ZapfDingbatsList pasamos el numero del símbolo que queremos utilizar, ese código anterior muestra este resultado en un PDF:
ZapfDingbatsList ejemplo
ZapfDingbatsList ejemplo
Y aquí te dejo los códigos de los símbolos que puedes utilizar en lowagie iText con una lista de tipo ZapfDingbatsList.
ZapfDingbatsList lista de simbolos
ZapfDingbatsList lista de símbolos
Si te sirvió de algo recuerda compartir y si tienes una duda coméntala. Suerte!!

17/6/15

Múltiples partialTriggers en adf. Varios partialTriggers en inputText/outputText

Múltiples partialTriggers en adf. Varios partialTriggers en inputText/outputText.

Múltiples o varios partialTriggers en un solo tag inputText/outputText de adf.




A veces queremos que dependiendo de un evento en particular, ya sea presionar un botón, ingresar un valor en un input o seleccionar un radio button en la interfaz de usuario se refresque un determinado componente o con el atributo partialTriggers, en este Dato Java explico cómo hacer para que un componente se refresque con varios eventos, por ejemplo, 2 input refrescan el mismo componente sin actualizar toda la pagina.
      
       
       
       
       
       
       
      
  
Como se ve en el código anterior es algo fácil, pero si no sabes, esta duda te puede quitar tiempo valioso, solo tenemos que poner en el atributo partialTriggers la cantidad de id's que refrescan ese componente y así podemos refrescar nuestro componente adf con varios partialTriggers.

16/6/15

CallableStatement con parámetros IN/OUT desde java.

CallableStatement con parámetros IN/OUT desde java.

Como ejecutar una consulta a Oracle PL/SQL con un parámetro IN/OUT desde CallableStatement Java.




Cuando trabajamos en Java con una base de datos Oracle PL/SQL sabemos que siempre en el DAO hacemos la llamada a un Strored Procedure y dependiendo de sus parámetros pasamos el valor correcto. Suponiendo que el Stored Procedure sea declarado en Oracle de esta manera:
  PROCEDURE SP_BUSCAR_USUARIO(NUMERO_DOCUMENTO IN NUMBER,
                              CODIGO_MENSAJE   OUT NUMBER,
                              MENSAJE          OUT VARCHAR2);
  
Ya sabemos que este SP tiene parámetros de entrada (IN) y de salida (OUT), para ejecutar este SP desde Java tenemos que hacer esto:
  CallableStatement callableStatement = null;
  Connection connection = null;
  ResultSet resultSet = null;

  String mensajeDevuelto = "";
  int codigoMensaje = 0;
  String sql = "{ CALL  PAQUETE_DATO_JAVA.SP_BUSCAR_USUARIO(?,?,?) }";
  try {
   connection = Control.getConnection();

   callableStatement = connection.prepareCall(sql.toString());
   callableStatement.setInt(1, numeroDocumento);
   callableStatement.registerOutParameter(2, OracleTypes.INTEGER);
   callableStatement.registerOutParameter(3, OracleTypes.VARCHAR);
   
   callableStatement.execute();
   
   codigoMensaje = callableStatement.getInt(2);
   mensaje = callableStatement.getString(3);

   //......
  
Como vemos anteriormente cuando un SP recibe parámetros de entrada (IN) en Java nosotros seteamos el parámetro en el CallableStatement, y si el SP recibe parámetros de salida (OUT) nosotros en Java registramos el tipo de parámetro de salida en el CallableStatement y después procedemos a insertarlo en una variable. Ahora lo que puede enredarnos es como hacer cuando un SP recibe un parámetro de entrada y salida (IN OUT), es sencillo eso lo hacemos así, suponiendo que esta sea la declaración del SP:
  PROCEDURE SP_BUSCAR_USUARIO(NUMERO_DOCUMENTO IN NUMBER,
                              CODIGO_MENSAJE   IN OUT NUMBER,
                              MENSAJE          OUT VARCHAR2);
  
Así lo ejecutamos desde Java:
  CallableStatement callableStatement = null;
  Connection connection = null;
  ResultSet resultSet = null;

  String mensajeDevuelto = "";
  int codigoMensaje = 0;
  String sql = "{ CALL  PAQUETE_DATO_JAVA.SP_BUSCAR_USUARIO(?,?,?) }";
  try {
   connection = Control.getConnection();

   callableStatement = connection.prepareCall(sql.toString());
   callableStatement.setInt(1, numeroDocumento);
   callableStatement.setInt(2, codigoMensaje);
   callableStatement.registerOutParameter(2, OracleTypes.INTEGER);
   callableStatement.registerOutParameter(3, OracleTypes.VARCHAR);
   
   callableStatement.execute();
   
   codigoMensaje = callableStatement.getInt(2);
   mensaje = callableStatement.getString(3);

   //......
  
Para que eso funcione primero tenemos que setear en el parámetro de entrada en el CallableStatement y después registrar el tipo de parámetro de salida en el mismo índice. Suerte, espero te sirva este Dato Java.

12/6/15

Tutorial de Aplicación Java Swing. Ejemplo simple y sencillo.

Aplicación Java Swing Simple y Sencilla.

Tutorial de Aplicación Java Swing, ejemplo de una aplicación Swing con varias ventanas.




Cuando estaba comenzando a programar en Java Swing después de ver tantos artículos y "tutoriales" locos de la web muchas veces no encontraba lo que en realidad estaba buscando, quería saber como hacer una aplicación Swing con varias ventanas, actualizando la misma ventana, después con un poco más de experiencia comencé con los tutoriales de Java Sun los cuales recomiendo con los ojos cerrados, todo lo que tenga que ver con Java podrás encontrarlo ahí. Casi siempre comenzamos a practicar con los componentes de Swing, o con el famoso y comercial "Hola Mundo", bueno en esta entrada vamos a hacer un mini tutorial en el cual vamos a crear una aplicación Java Swing simple y sencilla con más de una ventana, la idea es ver el funcionamiento de una aplicación con más de una ventana y distintos componentes. Como es algo sencillo y mi estilo en Swing es sin utilizar ningún GUI Builder (tipo WindowBuilder), ni ningún plugin parecido, vamos hacerlo todo manual. Bueno manos al teclado, haremos una ventana simple imitando una ventana de login y si el usuario y la clave son correctos nos lleva a otra ventana de inicio, esta fácil...


22/5/15

Como instalar WindowsBuilder en eclipse o en JBoss Developer Studio

Como instalar WindowBuilder en eclipse/JBoss Developer Studio.

Instalación del plugin WindowBuilder en eclipse/JBoss Developer Studio..




Cuando necesitamos hacer una interfaz grafica nos ponemos creativos primero en nuestra mente, a veces agarramos un papel y lapiz y comenzamos a dibujar como sería nuestra interfaz, también por cosas de rapidez es necesario utilizar algún programa que con solo arrastrar los componentes a una ventana podamos construir la interfaz y mejor aún si nos va creando el codigo de una vez, aquí es donde entra en el juego el plugin para eclipse o JBoss Developer Studio que lleva por nombre WindowBuilder, personalmente si tengo tiempo y estoy en la capacidad prefiero crear la interfaz manualmente (siento que así aprendo un poco más). Si descargamos eclipse/JBoss Developer Studio en cualquier version reciente ya viene el plugin incluido pero hay veces en las que ya tenemos una version que no tiene ese plugin y necesitamos agregarlo a nuestro developer de esta manera:
1) Ingresamos a este link oficial de eclipse.
Descargar WindowBuilder
Descargar WindowBuilder

19/5/15

Diferencia entre throw y throws en Java.

Diferencia entre throw y throws en Java.

Diferencias entre throw y throws, como utilizar estas palabras reservadas.




Hablando de excepciones en Java a veces caemos en la confusión con las palabras reservadas throw y throws ya que son muy similares, voy a dar unos breves ejemplos de cómo se utilizan y para qué sirven. Las excepciones en Java son básicamente los problemas o fallas que puede tener nuestra aplicación al momento de ejecutarla o en su ejecución, estas excepciones tenemos que manejarlas en los respectivos bloques de try - catch. La palabra reservada throw nos sirve para lanzar una excepción en cualquier bloque de código de nuestra aplicación, si te preguntas cual es la utilidad de esto te pongo el siguiente caso:

Supongamos que hacemos un método en el cual validamos ciertos datos, si hay un dato que según nuestros cálculos excede de un determinado valor podemos lanzar una excepción, ya sea creada por nosotros mismos o cualquiera del tipo java.lang.throwable, por ejemplo:
 public void pruebaThrow() throws Exception {
  Exception exception = new Exception();
  int a = 98;
  int b = 101;

  if (a > 100 || b > 100) {
   throw exception;
  }
 }
 
Como vemos en la línea número 07 lanzamos la excepción! OjO, ya sabemos que estas cosas hay que validarlas y no lanzar excepción de una vez, solo pongo esto de ejemplo para entender su funcionalidad...
Al hacer eso notaremos que la aplicación se detiene por la excepción.
La palabra reservada throws funciona para indicarnos que un método lanza una excepción de un tipo especifico o general, se puede utilizar si la excepción se va manejar con un try - catch o no. Así se utiliza:
 public static void prueba() throws SQLException {
  // Manejamos la excepcion de tipo SQL
 }

 public static void prueba() throws NullPointerException {
  // Manejamos la excepcion de tipo NULL
 }

 public static void prueba() throws DataFormatException {
  // Manejamos la excepcion de tipo DataFormat
 }
 
Si te fijas en el primer ejemplo de throw ya utilizamos la palabra reservada throws para especificar que ese metodo lanzaba una excepción. No hay mas nada que explicar por ahora...

30/3/15

iReport con Oracle PL-SQL y Aplicación Java Web Primefaces. Parte 2.

iReport con Oracle PL-SQL y Aplicación Web.

Tutorial de Jaspersoft iReport 5.6.0 utilizando Oracle PL-SQL y ejecutando el Reporte desde aplicación Java web con Primefaces. Parte 2.




Jaspersoft iReport 5.6.0 utilizando Oracle PL-SQL y JavaYa que en la 1era parte del Tutorial creamos todo lo que tiene que ver con el Jaspersoft iReport y la parte de Oracle PL/SQL en esta 2da parte vamos a crear la aplicación en Java para ejecutar el reporte, como dije anteriormente al momento de compilar el reporte en el Jaspersoft iReport se crean dos archivos en el directorio que hemos elegido, uno con la extensión .jasper y otro con la extensión .jrxml, el que nosotros vamos a ejecutar es el .jasper ya que el otro sirve para que puedas modificarlo en directamente en el iReport, la aplicación que ejecute dicho archivo será web y la vamos a crear con el framework para JSF que se llama Primefaces, hace un tiempo ya hemos hecho un tutorial para crear una aplicación desde 0 con Primefaces obteniendo como resultado una página con un menú, este es el Tutorial, vamos a seguir con ese mismo ejemplo (puedes descargar el proyecto de ese tutorial desde aquí). Para no hacer tan larga esta estrada ya que la misma está centrada en la ejecución del reporte desde una aplicación Java web utilizando Primefaces, vamos a crear en el menú un nuevo ítem, en ese nuevo ítem vamos a ejecutar el reporte que creamos con iReport, así que vamos hacer unas modificaciones pequeñas en el proyecto para llevar a cabo la ejecución del reporte.
Ahora tenemos que crear nuestro managed bean que se encargara de hacer la lógica y mostrar nuestro reporte, primero crearemos un paquete llamado "beansDatoJava" y dentro del mismo crearemos el managed bean llamado "DatoJavaReporteBean" con un método que se llame ejecutarReportePDF el cual vamos a implementar más adelante.

iReport con Oracle PL-SQL y Aplicación Java Web Primefaces. Parte 1.

iReport con Oracle PL-SQL y Aplicación Web.

Tutorial de Jaspersoft iReport 5.6.0 utilizando Oracle PL-SQL y ejecutando el Reporte desde aplicación Java web con Primefaces. Parte 1.




Jaspersoft iReport 5.6.0 utilizando Oracle PL-SQL y JavaPara este Tutorial vamos a utilizar Jaspersoft iReport Designer v5.6.0, Oracle PL-SQL para la base de datos y obviamente Java para ejecutar nuestro reporte en formato PDF, dicho reporte lo vamos a ejecutar desde una aplicación web con Primefaces, vamos a explicar cómo funciona este asunto primero.
Jaspersoft iReport es un diseñador para JasperReports, como sabemos JasperReports es una librería escrita totalmente en Java con la cual podemos crear informes de diferentes tipos, puedes crear/construir un archivo y exportarlo, puedes exportar archivos en varios formatos como por ejemplo: excel, word, xml, pdf, etc. En este Tutorial nos vamos a centrar en la creación de un archivo en .pdf.
Por que deberías usar Jaspersoft iReport?? Primero si eres un programador Java te comento que está hecho 100% en código Java, es de fácil manejo, no tienes que instalar nada, solo se descarga y comienzas a usarlo, aparte de eso es poderoso y fácil de usar, posee múltiples funciones para agregar cuadros de texto, párrafos, separadores, imágenes, sub-reportes, tablas, etc, todo lo que puedas imaginar que lleva un informe en PDF con iReport puedes hacerlo y aparte de eso puedes hacer tu conexión a la base de datos con JDBC y hacerle consultas a la misma ya sea con sql o llamando a un Stored Procedure y los registros que retorne puedes mostrarlos en el reporte, ya quedaron atrás esas librerías en las que uno redactaba todo el contenido del informe dentro del mismo código Java.
Imagina que haces un reporte con esa librería utilitaria en código Java y quieras cambiar una pequeña parte del informe después que el sistema ya paso a producción, bueno tampoco es que es muy difícil, buscar de nuevo dentro del código la parte que quieres editar, hacer el cambio, las pruebas y después coordinar otro pase a producción, un poco fastidioso no?? En fin con iReport solo buscas el archivo que exportaste y lo editas directamente ahí sin tener que tocar tu código Java lo que es una mejor practica de programación.

18/3/15

Estilo y color en celdas Excel desde Java

Estilo y color en celdas Excel desde Java.

Color en reporte Excel desde Java. Estilos en las celdas.

Estilos Excel Java



Para ponerle color a las celdas en un Excel desde Java es fácil, en este ejemplo vamos a construir el Excel (Si no sabes cómo hacerlo puedes aprenderlo aquí), vamos a ponerle color a las celdas dependiendo de un dato que en el mismo Excel se encuentra. Por ejemplo nos dan un requerimiento para un reporte con estas columnas "ID, NOMBRE, INGRESO" y en el mismo se pide:
  • Si el ingreso de un cliente está entre (0 - 100) esta celda debe ser de color ROJO
  • Si el ingreso de un cliente está entre (100 - 600) esta celda debe ser de color AMARILLO
  • Si el ingreso de un cliente es mayor a 600 esta celda debe ser de color VERDE
Después que ya creamos todo el Excel vamos a recorrerlo de nuevo y le vamos a dar el estilo correspondiente dependiendo del ingreso del cliente. Este es el método para que lo hagas:

11/3/15

Tabs/Pestañas en ADF

Tabs/Pestañas en ADF.

Como hacer tabs/pestañas en ADF JSF.




Cuando estamos en un proyecto a veces necesitamos hacer unas pestañas en el front-end, son prácticas y se hacen en una sola página. Para hacer pestañas en ADF es sencillo, aparte de crear las pestañas tenemos que crear su contenido y un backing bean que se encargara de hacer el renderer o mostrar el contenido de la pestaña seleccionada.

Vamos a imaginar que queremos mostrar la información de una cámara en varias pestañas:
  • Vista General.
  • Características.
  • Especificaciones.
Las pestañas deberían mostrarse de esta manera:
ADF tabs

9/3/15

Footer en ADF Table.

Footer en ADF Table.

Footer en ADF Table, JSF y Java.




Es común que en los requerimientos de un proyecto en Java con el framework ADF utilicemos tablas para representar cierta información, a veces nos piden que en esa tabla se muestre una columna al final en donde de ser el caso totalice los datos mostrados de una columna, esto se llama footer y para agregarlo a una tabla en ADF tenemos que utilizar el tag <facet>, no solo se utiliza para hacer una totalización de los datos representados en una columna también sirve para mostrar una especie de leyenda, hay tablas que son tan grandes que los nombres de las columnas estan abreviados y en el footer podríamos poner su respectiva leyenda, una tabla en ADF con footer se veria de esta manera:
footer ADF Table
Obviamente en la imagen anterior se llena la tabla con datos del backing bean, este es el codigo de este dato java para que puedas construir una tabla en ADF con footer:
   
    
     
    
    
     
     
      
       
      
     
    
    
     
     
      
       
      
     
    
    
    
    
    
     
      
     
    
     
Recuerda que tienes que poner un <facet> por cada columna en el caso de que quieras poner un footer en cada columna, de no ser así solo agregas un <facet> en las columnas que sea necesario.

2/3/15

Columnas Anidadas En ADF Table.

Culumnas Anidadas/Agrupadas en ADF Table, JSF.

Culumnas Anidadas/Agrupadas en ADF Table, JSF.




A veces es necesario en una tabla de ADF agrupar varias columnas en una sola, las columnas anidadas son necesarias cuando los datos que queremos representar estan relacionados entre si.

Por ejemplo supongamos que queremos representar los datos de varios carros y motos en una tabla dependiendo de su marca, podríamos hacer columnas anidadas relacionadas a la marca del carro y de la moto:
  • Año
  • Precio
    • USD
    • VEF
    • PEN
  • Tipo
  • Color
Una representación como la lista anterior pero en una tabla con columnas agrupadas debería verse así: Aqui te dejo el codigo para que puedas hacer tablas en ADF core con columnas anidadas:
  
      
       
        
        
        
         
         
         
        
        
        
        
        
       
      
      
       
        
        
        
         
         
         
        
        
        
        
        
       
      
     
 

Recuerda como dije anteriormente en este dato java que siempre que creemos columnas anidadas es porque las mismas estan relacionadas entre si.

26/2/15

JUnit Suite

JUnit Suite.

Pruebas unitarias con JUnit Suite.




Pruebas parametrizadas en JUnit. JUnitParams. Es muy común utilizar JUnit en proyectos grandes de Java ya que casi siempre trabajan varias personas en el mismo proyecto y es una buena práctica hacerle una prueba unitaria a los métodos que son un poco complejos para verificar que a medida que pasa el tiempo y los mismos son modificados en requerimientos futuros los métodos siguen estando completamente operativos. Lo que pasa es que las cosas se tienen que hacer entendibles y ordenadas, y para hacerlo de esa manera sería bueno hacer una clase de pruebas unitaria por cada clase que contenga métodos que queramos testear, si estas en un proyecto grande la cantidad de clases de pruebas unitarias sería muy grande. Para no correr una clase de prueba unitaria a la vez JUnit implemento una clase llamada JUnit Suite en la cual podemos correr todas las clases de pruebas unitarias de una sola vez y no una por una.

Para implementar esta clase tenemos que utilizar la anotación del runner @RunWith(Suite.class) y @SuiteClasses({ DatoJava1.class, DatoJava2.class, DatoJava3.class.... }) en donde declaramos las clases de pruebas unitarias que se van a ejecutar en este suite. Ubicamos esas anotaciones antes del nombre de la clase y con eso basta, no es necesario implementar algún método dentro de la clase o cualquier otra cosa. Un ejemplo de JUnit Suite sería así:

20/2/15

JUnit pruebas unitarias parametrizadas. Test con parámetros en JUnit. JUnitParams.

JUnit pruebas unitarias parametrizadas. Test con parámetros en JUnit. JUnitParams.

Test con parámetros en JUnit.




Pruebas parametrizadas en JUnit. JUnitParams. Haciendo pruebas unitarias siempre queremos que las mismas sean lo más fuertes posibles, con los tutoriales de JUnit assertions, assumptions y Hamcrest se pueden hacer, pero falta algo, hacer las pruebas con distintos parámetros y probar ese test con varios casos para asegurarnos de que en realidad el test funciona de manera correcta, para hacer pruebas unitarias parametrizadas en JUnit hay varias maneras, yo en este tutorial voy a poner los más usados y el que recomiendo.

Una prueba unitaria parametrizada no es más que un método de prueba en el cual deben realizarse como si de un bucle for se tratara una prueba por cada grupo de parámetros, esto hace la prueba unitaria mucho mas fuerte ya que así verificamos que en todos los casos posibles pase la prueba. Por ejemplo si no sabemos bien como hacer pruebas parametrizadas podemos utilizar nuestra lógica sencilla y hacer una prueba unitaria parecida a esta, lo cual no está mal pero hay una mejor manera:

12/2/15

java.lang.numberformatexception: For input string:

java.lang.NumberFormatException: For input string: "0,0".

java.lang.NumberFormatException



java.lang.NumberFormatException es una excepción en Java que a veces nos hace perder mucho tiempo cuando en realidad es una tontería, en este dato java te digo como solucionarlo.

Pongo de ejemplo este caso, estamos en un proyecto y resulta que todo funciona bien pero al tiempo cuando le haces una prueba comienza a fallar lanzando esta excepción en particular "java.lang.NumberFormatException: For input string: '0,0'", ahí es cuando te preguntas si es algún tipo de brujería o que es lo que está pasando, ya que ese código paso todas las etapas de prueba y en producción funciona de maravilla pero en tu maquina localhost no funciona... Que caga... Bueno te cuento que ahí interviene la configuración regional de tu equipo, en mi caso lo que paso fue eso, parece que en algún momento de mi vida cambie la configuración regional de mi equipo y Java a la hora de compilar esta tomando tu configuración regional y puede que algunas cosas no funcionen como deberían, para solucionarlo no cambie la configuración regional de mi equipo sino que utilice otro método el cual me asegura que funcionara con cualquier configuración regional.

En el código hacía unas operaciones con tipos de datos Double, por lo tanto para formatear el valor utilizo un DecimalFormat y ahí lanzaba la excepción, el código es así:
   Double valor = 0.0;
   DecimalFormat decimalFormat = new DecimalFormat("0.0");

   valor = Double.valueOf(decimalFormat.format((88778.65 / 13456.0)));
  
Justamente en la línea 4 se produce el error, para solucionar ese problemita independientemente de tu configuración regional, utilice la clase java.text.DecimalFormatSymbols de esta manera.
   DecimalFormatSymbols decimalFormatSymbols = DecimalFormatSymbols.getInstance();
   decimalFormatSymbols.setDecimalSeparator('.');
   
   Double valor = 0.0;
   DecimalFormat decimalFormat = new DecimalFormat("0.0", decimalFormatSymbols);

   valor = Double.valueOf(decimalFormat.format((88778.65 / 13456.0)));
  
Lo que hago es cambiarle el separador decimal que utiliza DecimalFormat basado en mi configuración regional. Depurando el ejemplo te muestro una lista de las propiedades de la clase DecimalFormatSymbols. Está utilizando la configuración regional de Perú.
DecimalFormatSymbols
DecimalFormatSymbols
Como vemos el separador de decimales en este caso es una "," y por eso lanza la excepción, espero hallas encontrado esta solución rápidamente y sigas programando tu aplicación relajado :)...



2/2/15

Tutorial JUnit Matchers. Tutorial JUnit Hamcrest.

Tutorial JUnit Matchers. Tutorial JUnit Hamcrest.

JUnit Matchers. Hamcrest lib.




JUnit Matchers Hamcrest Tutorial. Hamcrest es una librería basada en Matchers para poder hacer nuestras pruebas unitarias en JUnit mucho mas fuertes, esta librería incluso nos permite hacer pruebas equivalentes a cualquier método assert o assume, el lenguaje en el cual hacemos las pruebas unitarias es mas legible y los mensajes de error son mas descriptivos.

En este tutorial te voy hablar acerca de los org.hamcrest.CoreMatchers que son los más usados de esta librería para nuestras pruebas unitarias en JUnit, primero lo que tenemos que hacer es tener un poco de conocimiento acerca de:
Por lo menos para comprender un poco mas esta librería. Ahora si, mira este tutorial y aprende mas!

26/1/15

JUnit assume

JUnit assume. Tipos de assumptions.

JUnit assume. Tipos de assumptions.




JUnit Assume Tutorial. JUnit assume que es?? Este poderoso framework para hacer pruebas unitarias aparte de los metodos assertions(Afirmaciones), posee los metodos de assumptions(Supuestos) que sirven para hacer las pruebas unitarias un poco mas fuertes. Supongamos que escribimos nuestro test y antes de hacer el assert queremos asumir que un objeto tiene el valor que nosotros creemos que tendra para llevar a cabo la prueba, ahora si el objeto no tiene el valor que estamos asumiendo la prueba falla lanzando la excepcion AssumptionViolatedException, el hecho de que un supuesto assume falle no quiere decir que todo el test esta malo pero si nos permite hacer las pruebas unitarias un poco mas fuertes, así no tenemos que ejecutar todo el test para saber si pasa o no la prueba. A continuación te presento un ejemplo:

16/1/15

JUnit assert

JUnit assert. Tipos de assertions.

JUnit assert. Tipos de assertions.





JUnit Assert Tutorial JUnit nos proporciona métodos en los cuales nosotros podemos hacer afirmaciones (Assertions), con estos métodos podemos afirmar tipos primitivos, objetos y arreglos. Estos métodos están conformados de esta manera, (Mensaje en caso de falla, valor esperado, valor real), en el valor real es en donde vamos a afirmar que un valor será el que nosotros creemos, hay que tomar en cuenta que algunos varían con valor esperado y valor real.
Un ejemplo de afirmación de una suma utilizando el método assertEquals se vería así:
assertEquals("El resultado esta mal: ", 1 + 1, 2);

En donde estamos afirmando que la operación (1 + 1) = 2.
Sigue este tutorial y veras todos los tipos de afirmaciones:

7/1/15

java.lang.NoClassDefFoundError JUnit Java

java.lang.NoClassDefFoundError JUnit Java

java.lang.NoClassDefFoundError JUnit Java



Caused by: java.lang.NoClassDefFoundError: org/apache/juli/logging/LogFactory.
Caused by: java.lang.ClassNotFoundException: org.apache.juli.logging.LogFactory.

Cuando esto pasa es porque falta agregar la librería de tomcat a las propiedades del proyecto, puedes descargar esta versión tomcat-juli.jar y agregarla a las propiedades de tu proyecto en el cual estás haciendo tus pruebas unitarias con JUnit y asi solucionar esa excepción.

java.lang.ClassNotFoundException JUnit Java

java.lang.ClassNotFoundException JUnit Java

java.lang.ClassNotFoundException JUnit Java



Caused by: java.lang.ClassNotFoundException: org.apache.naming.java.javaURLContextFactory.

Cuando esto pasa es porque falta agregar la librería de catalina a las propiedades del proyecto, puedes descargar esta versión catalina-6.0.20.jar y agregarla a las propiedades de tu proyecto en el cual estás haciendo tus pruebas unitarias con JUnit y asi solucionar esa excepción.

javax.naming.NamingException JUnit Java

javax.naming.NamingException JUnit Java

javax.naming.NamingException JUnit Java




En este dato java estuve explicando paso a paso como utilizar por primera vez JUnit en eclipse/JBoss Developer Studio y nos quedamos en lo que pasaría cuando intentáramos hacer una prueba unitaria de una clase que hiciera una consulta a la base de datos mediante JNDI con Datasource. Al tratar de ejecutar esa prueba unitaria la aplicación nos lanza una excepción de tipo javax.naming.NamingException, ahora eso quiere decir que en algún momento a la hora de obtener la conexión a la base de datos mediante JNDI no puede cargar el Datasource ya que eso está configurado en el archivo de configuración del JBoss y como solo estamos haciendo una prueba unitaria de una clase dentro del mismo contenedor del JUnit y no del JBoss el no encuentra ese Datasource y lanza la excepción. Para resolver este inconveniente tenemos que inyectar el Datasource que vamos a usar al contenedor del JUnit siguiendo estos pasos.