Capturar webcam con VB.NET

¿Que haremos? Crearemos una aplicación en Visual Studio, la cual hará uso de una webcam para capturar el video en frames independientes y depositarlos en memoria para despues mostralos al usuario a través de un picturebox y un Timer para crear la ilusión de movimiento. ¿Porque lo haremos? Porque es justo y necesario ¿Que necesitamos? [...]

Envío de correo con JavaMail/Netbeans

JavaMail es una expansión de Java que facilita el envío y recepción de e-mail desde código java. JavaMail implementa el protocolo SMTP (Simple Mail Transfer Protocol) así como los distintos tipos de conexión con servidores de correo -TLS, SSL, autentificación con usuario y password, etc [Según SantaWikipedia] ¿Qué necesitamos? JavaMail 1.4.5 Java y Netbeans 6.9 [...]

Proyecto de base de datos Firebird VB

En este proyecto realizaremos una aplicación de base de datos Firebird con el lenguaje de programación de Visual Basic de Microsoft, este proyecto tendrá las funciones básicas de gestión INSERT, DELETE, UPDATE y una interfaz de usuario para utilizarlas. ¿Que necesitamos? Visual Studio 2008 o superior Firebird última versión Firebird ADO.NET Data Provider. Conocimientos básicos [...]

Imprimir imagen con Print

La siguiente clase hace uso de PRINT para imprimir una imagen que se encuentra en un variable de tipo FileInputStream, esta clase a su vez es implementada desde una interfaz que hace fácil su uso, la clase así como todo el proyecto esta comentado. import java.io.File; import javax.print.Doc; import java.io.IOException; import javax.print.DocFlavor; import javax.print.SimpleDoc; import java.io.FileInputStream; [...]

30/1/11

Base de Datos Access+Java "Control de Notas" (Proyecto Completo)

JAN29

Como regalo de año nuevo (aunque muy tarde) dejo a disposicion de la comunidad de programadores un proyecto Access+Java para su estudio y critica (critica constructiva claro) el cual consiste en una programa para el registro de Alumnos, registro de Asignaturas, Matriculacion del aAumno en una asignatura y su posterior control y registro de Notas del semestre.

La base de datos elegida es Access 2007 (*.accdb), pero claro la migracion hacia otra base de datos como MySQL o Postgress no es cosa del otro mundo, el trabajo solo consiste en modificar algunas instrucciones SQL que se encuentran en el codigo, mas propiamente en la clase SQL.java.

El programa:

El programa hace uso de una interfaz tipo formulario MDI, (Multiplie Document Interface) y de la libreria Substance para aplicar un skin a la interfaz, asi tambien para aplicar imagenes de fondo a los objetos JPanel, se hace uso de mi componente jcMousePanel.jar, estas librerias deben estar instaladas y configuradas en el IDE para poder ejecutar el codigo fuente correctamente. Tambien se utiliza el componente de Netbeans JFormattedTextField, componente que nos permite añadir una mascara de entrada (texto formateado) para ingresar correctamente los codigos (Carnet Univesitario, Codigo Asignatura) desde la interfaz.

La base de datos consta de tres tablas:
La interfaz cuenta con 4 formularios del tipo JInternalFrame:

JInternalFrame : Registro de Alumnos

JInternalFrame : Registro de Asignaturas
JInternalFrame : Matriculacion de Alumnos en Asignaturas
Para maticular a un alumno, se debe elegir  el codigo de la asigantura, el carnet del universitario y la gestion del curso, (01/11 = primer semestre del año 2011)

 JInternalFrame : Registro de Notas
 La logica es muy simple, cada examen vale 100 puntos pero se ponderan por el 50% , entonces la nota final sera la suma ponderada del examen 1 y el examen 2, notas menores a 51 (nota minima de aprobacion), aparecen en color ROJO (reprobaron), notas mayores o iguales a 51 y menores a 71 de color Amarillo, (Aprobaron), notas mayores o iguales a 71 de color Verde (unos NERD o llunkus de los docentes) pasaron con las mejores notas (pero aprendieron algo??????).

Demo

Enlace de Descarga
Click para descargar


Esta en un archivo RAR, sin password, contiene el codigo fuente en Netbeans 6.0, las librerias necesarias, la base de datos en Access 2007 y la aplicacion terminada.
Nivel: Intermedio - Avanzado
EL codigo esta bastante comentado, alguna duda pues pregunten.

continue reading

28/1/11

Conexion base de datos Access y Java

JAN29


Para poder acceder a una base de datos de Acces 2000-2010 de Microsoft, podemos utilzar dos formas, una de ellas es utilizando un Origen de Datos ODBC para utiliarlo como puente entra Access y Java, ó,una forma mas directa, es enlazar la base de datos Access con Java utilizando la API JDBC de java y especificando el driver, la base de datos y el password (si es que tuviera) para realizar una conexion como se hizo con MySQL y Java. (Conexion a Base de datos)


Nuestra clase java para poder realizar una conexion, es la iguiente:

Clase: Access_connection.java
codigo fuente
import java.sql.*;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
 * @web http://jc-mouse.blogspot.com/
 * @author Mouse
 */
public class Access_connection {
   //contraseña a la base de datos si es que tuviera, si no se deja vacio
   static String password = "";
   //nombre de la base de datos Acces con extension *.mdb o *.accdb
   static String dbName = "TU_BASE_DE_DATOS.mdb";
   //direccion de la base de datos
   static String bd = System.getProperty("user.dir") + "\\" + dbName + ";PWD=" + password;
   //driver para base de datos Access 2000, 2003, 2007, 2010
   static String url = "jdbc:odbc:;DRIVER=Microsoft Access Driver (*.mdb, *.accdb);DBQ=" + bd;
   Connection conn = null;
   
   public Access_connection() {
      try{
         //obtenemos el driver para Access 
         Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
         //obtenemos la conexión         
         conn = DriverManager.getConnection(url);
         //si la conexion tuvo exito
         if (conn!=null){
            System.out.println("Conexión a base de datos "+bd+". listo");
         }
      }catch(SQLException e){
         System.out.println(e);
      }catch(ClassNotFoundException e){
         System.out.println(e);
      }
   }
   
   /**Permite retornar la conexión*/
   public Connection getConnection(){
      return conn;
   }

   //como dice su nombre, termina la conexion a la base de datos
   public void desconectar(){
        try {
            conn.close();
            //conn = null;
            System.out.println("La conexion a la  base de datos " + bd + " a terminado");
        } catch (SQLException ex) {
            Logger.getLogger(Access_connection.class.getName()).log(Level.SEVERE, null, ex);
        }
       
   }
}

La direccion a la base de datos  se la realiza utilizando el comando "System.getProperty("user.dir")", el cual nos retorna la direccion de nuestro proyecto (*.JAR), si se desea especificar otra dirección, por ejemplo: "E:/mi base de datos/db.mdb", solamente se debe eliminar esa instruccion.

La forma de implementar esta clase, es similar a la clase conexion MySQL Conexion a Base de datos. osea:


public class Main {

    public static void main(String[] args) {
      //se realiza la conexion   
        Access_connection access = new Access_connection();
 //se cierra la conexion
        access.desconectar();
    }
    
}

Access cuenta con dos extensiones para base de datos, para versiones antiguas 2000-2003 utiliza la extension  *.mdb y para las versiones recientes de access 2007-2010, utiliza *.accdb, esta clase, Access_connection.java, realiza la conexion para ambas versiones.

fin?

continue reading

23/1/11

Video Tutorial: Reportes con iReport

JAN29

 JasperReporrt: JasperReports es una herramienta de creación de informes Java libre que tiene la habilidad de entregar contenido enriquecido al monitor, a la impresora o a ficheros PDF, HTML, XLS, CSV y XML.

Está escrito completamente en Java y puede ser usado en gran variedad de aplicaciones de Java, incluyendo J2EE o aplicaciones web, para generar contenido dinámico.

Su propósito principal es ayudar a crear documentos de tipo páginas, preparados para imprimir en una forma simple y flexible.

JasperReports se usa comúnmente con iReport, un front-end gráfico de código abierto para la edición de informes. [Wikipedia]


El siguiente video tutorial muestra la manera de utilizar la herramienta JaspertReport para crear un informe de manera visual utilizando para ello una conexion a una base de datos en MySQL. Los pasos y tecnicas utilizadas son validas para cualquier otra base de datos. El tutorial esta destinado a programadores novatos en el diseño y uso de reportes con iReport y su posterior utilizacion en algun IDE como netbeans.

Los temas que se tocan en este video tutorial son:
  1. Crear una conexion a una base de datos MySQL
  2. Crear una consulta SQL en JasperReport
  3. Crear un Infome simple (básico)
  4. Crear un Informe con un parametro de entrada (Intermedio)
Capturas de pantalla

Datos Tecnicos:
  • Formato: SWF
  • Compresion: RAR
  • Resolucion: buena
  • Tamaño: 15MB
  • Contenido: El archivo *.rar contiene el videotutorial asi como la base de datos que se utilizo para la realizacion del informe
Click para descargar

continue reading

22/1/11

Java2D: Marca de Agua con Java

JAN29

Java2d nos permite tambien trabajar con archivos de imagen en diferentes formatos, Java2D tambien cuenta con varios metodos para poder manipular estas imagenes. Aqui un pequeño ejemplo de lo que se puede hacer, el siguiente proyecto hecho en netbeans 6.0, sirve para colocar una "marca de agua" sobre una imagen.

Proyecto:
1. Crea un nuevo proyecto en Netbeans, llamalo como quieras, añade un JFrame y llamalo "interfaz.java", despues añade una clase y llamalo "H2O.java", debes tener algo como esto:
2. Trabajaremos con la interfaz de la siguiente manera:
3. El codigo para la clase "H2O.java", es el siguiente:


import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.RenderingHints;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.filechooser.FileNameExtensionFilter;
/**
 * @web http://jc-mouse.blogspot.com/
 * @author Mouse
 */
public class H2O extends JPanel implements MouseMotionListener {
    private FileNameExtensionFilter filter = new FileNameExtensionFilter("Archivo de Imagen","jpg","png");
    //tamaño del contenedor
    private int ancho=0;
    private int alto=0;
    //foto y marca de agua
    private Image Fotografia;
    private Image Marca_de_Agua;
    //imagen que se crea en memoria con ambas imagenes
    private BufferedImage Imagen_en_memoria;
    //coordenadas de la marca de agua
     private int Pos_Marca_X=0, Pos_Marca_Y=0;
     
    public H2O(){     
        this.setPreferredSize(new Dimension(ancho,alto));
        this.setSize(new Dimension(ancho,alto));
        this.setVisible(true);
        this.repaint();        
        addMouseMotionListener(this);
    }
    
    //se sobreescribe el metodo paint
    @Override        
    @SuppressWarnings("empty-statement")
    protected void paintComponent(Graphics g) {
        Graphics2D g2 = (Graphics2D)g;
        //se crea una imagen en memoria
        Imagen_en_memoria = new BufferedImage(this.getWidth(), this.getHeight(), BufferedImage.TYPE_INT_RGB); ;                       
        Graphics2D gOculta = Imagen_en_memoria.createGraphics();
        gOculta.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);        
        //se dibuja las imagenes en el contenedor
        gOculta.drawImage(Fotografia,0,0,this);
        gOculta.drawImage(Marca_de_Agua,this.Pos_Marca_X,this.Pos_Marca_Y,this);
        g2.drawImage(Imagen_en_memoria, 0, 0, this);        
    }

    //muestra una ventana de dialgo para abrir un archivo de imagen
    public String Open(String opcion){
       String file=null; 
       JFileChooser fileChooser = new JFileChooser();       
       fileChooser.setFileFilter(filter);
       int result = fileChooser.showOpenDialog(null);  
       if ( result == JFileChooser.APPROVE_OPTION ){                                 
                //se obtiene la direccion del archivo
                file = fileChooser.getSelectedFile().toString();
                if(opcion.equals("foto")){
                    Fotografia = new ImageIcon(file).getImage();                               
                    ancho = Fotografia.getWidth(this);
                    alto = Fotografia.getHeight(this);                    
                    this.setPreferredSize(new Dimension(ancho,alto));
                    this.setSize(new Dimension(ancho,alto));                          
                }else if(opcion.equals("marca")){
                    Marca_de_Agua = new ImageIcon(file).getImage();                            
                }
                this.repaint();
        }
       return file;
    }   
    
 //abre una ventana de dialogo para escoger la direccion y el nombre del archivo a guardar   
 public void Save(){
       String file=null; 
       JFileChooser fileChooser = new JFileChooser();       
       fileChooser.setFileFilter(filter);
       int result = fileChooser.showSaveDialog(null);
       if ( result == JFileChooser.APPROVE_OPTION ){                                 
                file = fileChooser.getSelectedFile().toString();                
                guardar_imagen(file + ".jpg");           
        }       
    }   

    //metodo que guarda la imagen en disco
    private void guardar_imagen(String f){
        try {
            //se extrae el fomato de la cadena "f" que contiene la direccion
            String formato = (f.endsWith(".jpg")) ? "jpg" : "png";   
            //se escribe en disco
            ImageIO.write(Imagen_en_memoria, formato, new File(f));
            JOptionPane.showMessageDialog(null, "La imagen se guardo correctamente...");
 } catch (IOException e) {            
            JOptionPane.showMessageDialog(null, "Error: no se pudo crear la imagen");
            System.out.println("Error: no se pudo crear la imagen");
 }
   }  
    
    //movimientos del raton
    public void mouseDragged(MouseEvent e) {
            Pos_Marca_X = (int)e.getPoint().getX();
            Pos_Marca_Y = (int)e.getPoint().getY();            
            repaint();
    }

    public void mouseMoved(MouseEvent e) {}   
   
}

Esta clase, "H2O.java" se extiende de un objeto JPanel, y sobreescribe el metodo paintComponent para dibujar una imagen sobre este, la imagen es el resultado de la combinacion de dos imagenes, una grande la imagen de fondo y una mas pequeña que es la marca de agua, esta imagen puede cambiar de posicion, realizando un clic sostendido sobre este y moviendo el mouse.

Asi tambien, esta clase cuenta con con otros metodos para cargar la imagenes mostrando una ventana de dialogo. y claro esta, un metodo para guardar la imagen en disco. Todo el codigo esta extra comentado.

4. Para implementar esta clase "H2O.java" en la interfaz, debemos hacer lo siguiente:


public class interfaz extends javax.swing.JFrame {
    //se crea el objeto jpanel H2O
    H2O j2d = new H2O();      
    
    /** Creates new form interfaz */
    public interfaz() {
        initComponents();   
        this.setTitle("Marca de Agua - by Mouse");
        //se añade el jpanel al Scroll
        jScrollPane1.setViewportView(j2d);         
        this.repaint();     
    }
   
   private void cmdLoad2ActionPerformed(java.awt.event.ActionEvent evt) {
        Imagen2.setText(j2d.Open("marca"));        
        
   }

    private void cmdLoad1ActionPerformed(java.awt.event.ActionEvent evt) {
        Imagen1.setText(j2d.Open("foto"));         
   }

    private void cmdSaveActionPerformed(java.awt.event.ActionEvent evt) {
        if(!Imagen1.getText().isEmpty() && !Imagen2.getText().isEmpty())
            j2d.Save();
   }

 /* resto de codigo en netbeans */    

}

Nota: no copies y pegues, analiza el codigo ;)

Si llegaste hasta aqui, solo nos falta compilar el proyecto y si existe ningun error, vamos a probarlo:

La imagen a la cual le colocaremos la marca de agua es esta:
Si, lo se ;)
Y la marca de agua es
Es un archivo PNG con transparencia, tambien puede ser un archivo JPG

Cargamos las imagenes en la aplicacion:
Podemos dar la hubicacion que queramos a la marca de agua, y despues ya podemos guardar.

Espero que les haya gustado este proyecto, a mi si :)

continue reading

18/1/11

Componente Swing: jcFoto

JAN29


jcFoto: Componente Swing Java que nos permite cargar una archivo de imagen (*.jpg, *.png, *.gif, *.bmp) de una forma sencilla y visual para asi tenerlo listo para utilizarlo en cualquier proyecto Java.

Yo lo utilizo para el registro de personal donde es necesario la manipulación de fotografias en el registro. La imagen, no importa el tamaño es escalada para que pueda ingresar en el recuadro de la fotografia, pero a la vez, la imagen original es mantenida en memoria para poder utilizarla en cualquier momento.
Metodos.
Este componente cuenta con los siguientes metodos:

setFoto(Icon archivo_imagen): el cual nos permite ingresar la imagen desde codigo.
Icon getFoto(): El cual nos permite obtener la imagen que tengamos cargada en el componente, si no tenemos ninguna, devuelve una iamgen por defecto "No Imagen".

setFotoDefault(Icon f): Igual a la anterior, pero la imagen que se coloca por este metodo, es la imagen que aparecera cuando el componente no tenga imagenes cargadas
 Icon getFotoDefault(): retorna la imagen "default".

setPadre(JFrame f): Metodo para indicar cual es el componente padre donde se utiliza el Swing.
JFrame getPadre(): retorna el componente padre.

String getPathFoto(): Metodo el cual retorna la direccion de donde se cargo la imagen, por ejemplo: "c:/archivo/imagen.jpg", si no se tiene una imagen cargada, retorna NULL.

Instalacion: Se instala como cualquier otro componente SWING, sino sabes como, date una vuelta por el siguiente tutorial. (Añadir/Instalar nuevas librerias en Netbeans), (Crear componentes Swing Java con Netbeans)

Uso: Su uso es como cualquier otro componente de java Netbeans. Para cargar una imagen solo debes presionar el boton "Cargar" inmediatamente se despliegua una ventana desde donde podras buscar el archivo que quieras insertar. Pero mejor mira el video, asi es mas sencillo:


Precio: es GRATIS, solo espero que te sirva como me sirve a mi en algunos trabajos.
Click para descargar


Nota: Algun bug, por favor avisar para asi mejorarlo...

continue reading

15/1/11

Crear copia de Seguridad [BackUp] de MySQL en Java

JAN29

¿Qué es un backup?

Una copia de seguridad o backup (su nombre en Inglés) en tecnología de la información o informática es una copia de seguridad - o el proceso de copia de seguridad - con el fin de que estas copias adicionales puedan utilizarse para restaurar el original después de una eventual pérdida de datos. [Wikipedia]

El siguiente codigo, BackUpSample.java, realiza una instruccion en mysqldump para crear el backup en memoria, despues este es guardado en un archivo SQL especificando su direccion y extension.

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.FileWriter;
import java.io.PrintWriter;
/**
 * @web http://jc-mouse.blogspot.com/
 * @author Mouse
 */
public class BackUpSample {
    private int BUFFER = 10485760;  
    //para guardar en memmoria
    private StringBuffer temp = null;
    //para guardar el archivo SQL
    private FileWriter  fichero = null;
    private PrintWriter pw = null;
    
 public boolean CrearBackup(String host, String port, String user, String password, String db, String file_backup){
    boolean ok=false;
    try{       
        //sentencia para crear el BackUp
         Process run = Runtime.getRuntime().exec(
        "mysqldump --host=" + host + " --port=" + port +
        " --user=" + user + " --password=" + password +
        " --compact --complete-insert --extended-insert --skip-quote-names" +
        " --skip-comments --skip-triggers " + db);
        //se guarda en memoria el backup
        InputStream in = run.getInputStream();
        BufferedReader br = new BufferedReader(new InputStreamReader(in));
        temp = new StringBuffer();
        int count;
        char[] cbuf = new char[BUFFER];
        while ((count = br.read(cbuf, 0, BUFFER)) != -1)
            temp.append(cbuf, 0, count);
        br.close();
        in.close();        
        /* se crea y escribe el archivo SQL */
        fichero = new FileWriter(file_backup);
        pw = new PrintWriter(fichero);                                                    
        pw.println(temp.toString());  
        ok=true;
   }
    catch (Exception ex){
            ex.printStackTrace();
    } finally {
       try {           
         if (null != fichero)
              fichero.close();
       } catch (Exception e2) {
           e2.printStackTrace();
       }
    }   
    return ok; 
 }  
 
}

Y la forma de utilizarlo:


public class Main {

    public static void main(String[] args) {    
     new BackUpSample().CrearBackup("HOST", "PUERTO", "USUARIO", "PASSWORD", "BASE DE DATOS","DIRECCION DEL ARCHIVO");
    }
    
}

donde:

HOST : localhost
PUERTO: 3306
USUARIO: el usuario de mysql
PASSWORD: el paasword de mysql
BASE DE DATOS: el nombre de la base de datos del cual se quiere realizar el backup
DIRECCION DEL ARCHIVO: la direccion donde se guardara el backup. Ej. "e:/copia de seguridad/backup.sql"

y tenemos:


fin

continue reading

14/1/11

Reportes con iReport y Netbeans [Basico - Parte 2]

JAN29

Dando continuacion al tutorial "Reportes con iReport [Basico - Parte 1]", en esta segunda parte utilizaremos los archivos generados con iReport, rSample.jasper y rSample.jrxml que vimos en la primera parte y los cuales implementaremos en Netbeans para visualizar estos desde este IDE.

¿Que nececitamos?
  • Los archivos "rSample.jasper" y "rSample.jrxml" vistos en la primera parte de este tutorial
  • Las librerias necesarias para ejecutar un reporte con iReport son:
  1. commons-beanutils-1.8.2.jar
  2. commons-collections-3.2.1.jar
  3. commons-digester-1.7.jar
  4. commons-javaflow-20060411.jar
  5. commons-logging-1.1.jar
  6. groovy-all-1.5.5.jar
  7. iText-2.1.7.jar
  8. jasperreports-3.7.2.jar
Descarga y añade estos JAR en una nueva libreria, si no sabes como, date una vuelta por aqui: Añadir/Instalar nuevas librerias en Netbeans.
  • Tambien necesitamos la libreria : MySQL JDBC Driver. para la conexion a la base de datos.
Para realizar este tutorial se supone que tienes un nivel intermedio en el lenguaje Java, se daran muchas cosas por entendidas ya que si eres un novato en Java y pretendes comenzar este lenguaje haciendo reportes, dejame decirte que aprende primero a gatear y despues ponte a caminar.


El Proyecto.

1. Crea un nuevo proyecto en netbeans, "iReport_Sample".

2. Añade las librerias mencionadas más arriba

3. Crea una clase iReportClass.java

4. Crea una clase conexion.java

5. Los archivos "rSample.jasper" y "rSample.jrxml"debes colocarlos en la misma carpeta del proyecto, osea:
6. Ahora ya debes tener algo como esto en Netbeans:

Si no es asi, revisa los pasos anteriores para poder continuar.

7. El codigo necesario para la clase conexion.java, es:


package ireport_sample;
import java.sql.*;
/**
 * @web http://jc-mouse.blogspot.com/
 * @author Mouse
 */
public class conexion {
   static String bd = "dbSample";
   static String login = "USUARIO";
   static String password = "PASSWORD";
   static String url = "jdbc:mysql://localhost/"+bd;

   Connection conn = null;

   /** Constructor de DbConnection */
   public conexion() {
      try{
         //obtenemos el driver de para mysql
         Class.forName("com.mysql.jdbc.Driver");
         //obtenemos la conexión
         conn = DriverManager.getConnection(url,login,password);
         if (conn!=null){
            System.out.println("Conexión a base de datos "+bd+". listo");
         }
      }catch(SQLException e){
         System.out.println(e);
      }catch(ClassNotFoundException e){
         System.out.println(e);
      }
   }
   /* Permite retornar la conexión */
   public Connection getConnection(){
      return conn;
   }
   /* termina la conexion a la base de datos */
   public void desconectar(){
      conn = null;
      System.out.println("La conexion a la  base de datos "+bd+" a terminado");
   }
}

Esta clase es la que nos ayuda a conectarnos con la base de datos, puedes saber mas de ella en: Clase conexion a base de datos.

8. El codigo para la clase iReportClass.java, es:


package ireport_sample;
/* librerias de ireport*/
import java.net.URL;
import java.util.HashMap;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.util.JRLoader;
import net.sf.jasperreports.view.JasperViewer;
/**
 * @web http://jc-mouse.blogspot.com/
 * @author Mouse
 */
public class iReportClass {
    //se estable una conexion con la base de datos
    private conexion con = new conexion();    
     /* reporte sencillo con conexion a base de datos MySQL, 
      * el reporte no cuenta con parametros */
     public void reporte(){         
     JasperReport reporte;
     JasperPrint reporte_view;     
     try{
         //direccion del archivo JASPER
          URL  in = this.getClass().getResource("rSample.jasper");
          reporte = (JasperReport) JRLoader.loadObject( in );           
          reporte_view= JasperFillManager.fillReport( reporte, new HashMap(), con.getConnection() );
          JasperViewer.viewReport( reporte_view ); 
          //terminamos la conexion a la base de datos
          con.desconectar();
   }catch (JRException E){
     E.printStackTrace();
          }
    }
}

Nuestro reporte es sencillo, no cuenta con parametros de entrada ni imagenes, lo unico que hacemos es instanciar nuestro archivo JASPER para luego lanzar el JASPERVIEWER y ver nuesotro reporte desde netbeans.

9.  Finalmente el codigo para llamar esta clase desde el Main, es:


package ireport_sample;
public class Main {

    public static void main(String[] args) {
        new iReportClass().reporte();
    }

}
10. Compilamos y ejecutamos el proyecto,
FIN

Los archivos utilizados para este proyecto estan en el siguiente enlace:


Enlace actualizado al 19 de noviembre de 2011

http://link.jc-mouse.net/?id=IRJAVSAMP7

continue reading

13/1/11

Reportes con iReport [Basico - Parte1]

JAN29

¿Que es iReport?

iReport es una herramienta que nos permite crear reportes visualmente y los formatos que soporta para la salida son XML, PDF, XLS, HTML, CSV, etc.

Es gratuito y viene como una aplicacion independiente o como plugin para Netbeans, lo puedes descargar desde la pagina del proyecto http://jasperforge.org/. En este tutorial utilizaremos iReport como una aplicacion independiente.

Podemos crear reportes de varias maneras, desde una base de datos lo más comun, de archivos XML o "sin datos" un reporte vacio. Aqui veremos un ejemplo utilizando una base de datos en MySQL.

La base de datos.

La Base de datos que utilizaremos para este ejemplo, la llamaremos "dbSample", y solo constara de una tabla PERSONA:


create table PERSONA (
    p_id bigint(20) NOT NULL auto_increment primary key,    
    p_nombre Varchar(20) not null,
    p_paterno Varchar(20) not null,
    p_materno Varchar(20) null,
    p_direccion Varchar(100) null,
    p_telefono varchar(12) null    
);
y unos cuantos datos


insert into PERSONA( p_nombre , p_paterno , p_materno , p_direccion , p_telefono )
values('Antonio','Bragueta','Suelta','Calle Imaginaria # 345','123-456-789');

insert into PERSONA( p_nombre , p_paterno , p_materno , p_direccion , p_telefono )
values('Jesús','Están','Camino','Calle Imaginaria # 598','');
   
insert into PERSONA( p_nombre , p_paterno , p_materno , p_direccion , p_telefono )
values('Margarita','Flores','del Campo','Calle Imaginaria # 989','878-998-565');
  
insert into PERSONA( p_nombre , p_paterno , p_materno , p_direccion , p_telefono )
values('Rosa','Pechoabierto','Alinstante','Calle Imaginaria # 339','');
  
insert into PERSONA( p_nombre , p_paterno , p_materno , p_direccion , p_telefono )
values('Emiliano','Salido','del Pozo','Av. Quete Importa s/n','888-298-565');
   
insert into PERSONA( p_nombre , p_paterno , p_materno , p_direccion , p_telefono )
values('Dolores','Fuertes','De barriga','Av. Quete Importa #779','008-908-165');

insert into PERSONA( p_nombre , p_paterno , p_materno , p_direccion , p_telefono )
values('Juan','Melo','Machuca','Calle Noseencuentra #721','098-334-212');
Una vez que ya tienes la base de datos creada junto a la tabla y los datos podemos comenzar.

Trabajando con iReport

1. Ejecuta iReport, la aplicacion tiene una interfaz sencilla, no hay pierde, cada una de las secciones de este las veremos a medida que la complejidad de los reportes avance.
2. Busca la opcion Archivo -> New , te aparecera un ventana donde podras escoger el tipo de reporte que quieres, escoge una vacia "Blank Letter" y presiona "Open this template"
3. Ahora dale un nombre al reporte, por ejemplo "rSample", tambien puedes escoger donde guardaras los archivos. Presiona Siguiente y despues Terminar.

4. La Plantilla de nuestro reporte esta listo, puedes observar como la hoja esta dividida en varios sectores al igual que "Report Inspector" ahora esta lleno , por el momento no entraremos en detalle sobre estos nuevos elementos que vemos,  paciencia. ;)

5.Ahora que tenemos nuestra plantilla, procederemos a conectar esta con la base de datos. Sobre la barra de herramientas, busca el icono que tiene la forma de cilindro con un enchufe y dale clic.

6. en la ventana que aparece, "Conenction/Datasources" podemos ver las conexion que tenemos de trabajos anteriores, crearemos una nueva conexion a nuestra base de datos dbSample, para ello clic en New.
7. Aqui escogemos el "DataSource", osea el "origen de datos". Podemos ver que tenemos varias opciones, para este ejemplo trabajeremos con el "Database JDBC connections", y clic en Next.

8. Para terminar la configuracion, primero, escribimos un nombre para nuestra conexion a la base de datos, "dbSample_connection", despues escogemos el driver, MySQL (com.mysql.jdbc.Driver), y escribimos el nombre de a base de datos "dbSample", y presionamos el boton Wizard. Finalmente escribimos introducimos el  usuario "Username", en mi caso lo tengo el default, osea "root" y escribimos el Password. Clic en Save.
9. Si nuestra conexion esta bien hecha, podremos ver que se agrego a nuestra lista de "Conenction/Datasources" , ya podemos cerrar la ventana. Close.

10. IMPORTANTE: fijate que ahora tenemos seleccionado nuestra conexion, si no es asi, busca la conexion.
Ahora debemos crear la consulta SQL para extraer los datos , presiona el icono con forma de cilindro y una flecha.

11. En la ventana que aparece, debemos escribir la consulta en el espacio correspondiente, como nuestra base de datos solo consta de una tabla y esta tabla es sencilla, hacemos un select para todos los elementos y presionamos OK.
12. Ya de vuelta en la pantalla principal de iReport, en la ventana de "Report Inspector", busca la opcion Fields y desplieguela, podra ver como los campos de nuestra tabla PERSONA, estan presentes, ahora estos campos uno por uno, arrestrelos con clic sostenido hasta la hoja, coloquelos sobre el sector de "details", si fuera necesario, puedes cambiar el tamaño de estos campos moviendos los pequeños recuadros que este tiene.
13. Ya que tengamos nuestro reporte hecho, debemos ver como quedo, para esto clic en la opcion PREVIEW, si no existen errores, podra ver algo como esto:

Eso es todo nuestro reporte esta terminado, los archvos que este creo son:
  • rSample.jasper
  • rSample.jrxml
Estos archivos los utilizaremos mas adelante para trabajar con netbeans u otro IDE. Hasta pronto.

[Actualizado]

La segunda parte: Reportes con iReport y Netbeans [Basico - Parte 2], esta listo.

continue reading

Post recomendado