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; [...]

Code Army Bolivia

29/5/10

Convertir HTML a PDF con DOMPDF

JAN29


Buscando alternativas para un trabajo que tenia, me encontre con la libreria DOMPDF, esta libreria te permite convertir archivos HTML a PDF facilmente utilizando PHP, aunque aun se encuentra en fase beta y acepta hojas de estillo (CSS) asi como tablas con formato e imagenes, no es del todo compatible con el lenguaje HTML y CSS ademas de que requiere mucho uso de RAM y Micro, pero sirve para realizar trabajos sencillos.

Lo primero, descargate la libreria desde este enlace en code google. Se encuentra en la version 0.6.0 beta y es la que utilizaremos.
Puedes tambien descargarte la documentacion y ver algunos ejemplos desde se web.

Manos a la obra

El codigo necesario para convertir HTML a PDF es :




<?php
//se incluye la libreria de dompdf
require_once("dompdf/dompdf_config.inc.php");
$code = '<html><head><title>Hola</title></head>
<body><h1>Hola Mundo</h1></body></html>';    
//se crea una nueva instancia al DOMPDF
$dompdf = new DOMPDF();
//se carga el codigo html
$dompdf->load_html($code);
//aumentamos memoria del servidor si es necesario
ini_set("memory_limit","32M"); 
//lanzamos a render
$dompdf->render();
//guardamos a PDF
$dompdf->stream("mipdf.pdf");
?>



Explicacion:

En la primera linea de codigo incluimos la libreria con la palabra reservada REQUIRE_ONCE
En la variable CODE se coloca como un string, el codigo HTML a convertir.
Luego se crea una nueva instancia al objeto dompdf y se carga el codigo HTML
Con ini_set, aumentamos la memoria del servidor que en mi caso, utilizo appserver y tiene 8M de memoria limite, esto no siempre es necesario y depende del serrvidor que utilices.
Por ultimo lanzamos a render y guardamos el PDF

El codigo de prueba utilizado es este, la Oración del Geek:


<html><head>
<title>Oracion del Geek</title>
<style type="text/css">
body{
margin: 15px 40px;
}
table{
text-align:center;
}
p{
text-align:center;
font-style:italic;
font-family:"Times New Roman", Times, serif;
font-size:20px;
}
h1{
color:#0033CC;
text-align:center;
font-style:italic;
font-weight:bold;
border-bottom:#003366 solid 3px;
}
</style>
</head>
<body>
<h1>Oración del Geek</h1>
<table width="563" align="center">
  <tr>
    <td>
    <p><img src="imagen/nerd.jpg" width="450" height="305"></p>
    <p>Padre Nuestro…  </p>
    <p>Santificado sea tu server, </p>
<p>venga a nosotros tu freeware  </p>
<p>Hágase tu downloading así en el http como en el ftp  </p>
<p>Danos hoy nuestro surfing de cada día,  </p>
<p>Perdona nuestros bugs  como nosotros también perdonamos a Microsoft.  </p>
<p>No nos dejes caer en un Mac y líbranos de todo Spyware.  </p>
<p>Enter…</p>
<p><img src="imagen/i-love-geeks.jpg" width="500" height="375"></p></td>
  </tr>
</table>
</body>
</html>

Y me da como resultado:

Lo bueno: Su uso es realmente facil y cuenta con una documentacion amplia
Lo malo: Esta en fase beta y no totalmente compatible
Lo feo: Tarda horrores al procesar tablas complejas y requiere mucha memoria

Aqui te dejo el ejemplo que yo utilice
Click para descargar
enlace actualizado abril 2012

No soy antisocial; Simplemente no soy amistoso al usuario.

continue reading

21/5/10

Yo tambien jugue Pacman

JAN29


El clasico juego PACMAN cumple 30 años de vida y Google sorprendio al mundo al no colocar una imagen estatica, sino el juego de consola completo el que se inicia solo al esperar unos cuantos cuantos segundos.

Ya me imagino las risas y burlas de millones de jovenes-adolescentes al menospreciar este juego con sus "world of warcraft", "ned for speed 3d", "Halo" etc, pero para que se enteren este juego fue uno de lo mejores hace 3 decadas :D y tiene toda una historia detras de sus hombros, es el abuelo de los juegos de hoy en dia los cuales en lo personal me aburren el solo jugarlos un par de vece,  pero Pacman al ser un juego tan simple, tan basico es tan adictivo que solo pueden comprobarlo si lo juegan.


iba a colocar este post mas temprano, pero me pase toda la tarde jugando

Para los que quieran el codigo fuente para jugarlo aqui esta.

continue reading

16/5/10

Reproductor MP3 en java

JAN29


Posteando de tiempo, se me ocurrio compartir el codigo de un simple reproductor mp3 hecho en java con la API de Java Media Framework. El codigo qu presento a continuacion sirve como base para el desarrollo de proyectos mucho mas ambiciosos, pero claro todo depende de las ganas que le pongas al programar, todo esta en tus manos, yo te digo como comenzar pero tu decides como terminar.

El proyecto.
Necesitas:
  • Java, obvio no :D
  • un IDE, yo utilizo Netbeans 6.0
  • el API de Java Media Framework
  • 15 minutos de tu tiempo

Creando la Interfaz

1. Crea un nuevo proyecto en Netbeans y añade un JFrame: reproductor, a este jframe añade un Menu, un JSlider , dos jButton y un label en la parte inferior, trata de que te quede como en la imagen de abajo

El reproductor

2. Crea una nueva clase y llamala mp3.java, esta clase es la encargada de trabajar con los archivos MP3. El codigo necesario esta aqui:


import java.io.IOException;
import java.net.URL;
import javax.media.CannotRealizeException;
import javax.media.Manager;
import javax.media.NoPlayerException;
import javax.media.Player;
import java.util.Timer;
import javax.swing.*;
import java.awt.*;
import java.util.TimerTask;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.filechooser.FileNameExtensionFilter;
/**
 * @web http://jc-mouse.blogspot.com/
 * @author Mouse
 */
public class mp3{
//el player
private Player mediaPlayer;
//animacion
private Timer tiempo ;
private TimerTask task;
private int speed = 1000;//velocidad
private int frame=0;
//control    
boolean run = false;    
boolean todo_ok = false;
//archivo
URL mediaURL=null;
String file="";   
//otros
String t=null;
//filtro
private static FileNameExtensionFilter filter = new FileNameExtensionFilter("Archivo MP3","mp3","mp3");
    
//el constructor vacio
    public mp3() {} 
   /* controles de reproduccion */
public String STOP(){        
//comprueba que el reproductor tenga un archivo
    if (todo_ok){
        mediaPlayer.stop();  
        this.todo_ok=false;  
        this.run=false;
        this.file="";
        this.stopAnimation();
    }
    return "Reproductor mp3 - by Mouse";
}

/* Reproduce un archivo mp3, si no encuentra ninguno devuelve
 un string vacio */
public String PLAY(JSlider b){
    t ="No existe ningun archivo...";
    if (todo_ok){
        if(!run){//si ya se esta reproduciendo
            mediaPlayer.start();
            this.run=true;
            t="Reproduciendo";
            this.startAnimation(b);
        }
    }
    return t;
}  
  
 //para la animacion  
public void startAnimation(final JSlider b) {    
    if (todo_ok) {
        tiempo = new Timer();
        task = new TimerTask() {
            public void run() {     
                //calculamos el tiempo de la animacion por 100%
                frame = (int) Math.round((mediaPlayer.getMediaTime().getSeconds() * 100)/mediaPlayer.getDuration().getSeconds());
                //cuando ambos sean iguales quiere decir que el video a alcanzado el final de la reproduccion
                if(mediaPlayer.getMediaTime().getSeconds() == mediaPlayer.getDuration().getSeconds()){
                    frame=100; // 100%
                    STOP();//SE DETIENE Y DESTRUYE EL MEDIA PLAYER
                }
                else // sino
                {
                    // se actualiza el nuevo valor del Slider
                    b.setValue(frame);
                    //Porcentaja de reproduccion
                     System.out.println("Tiempo de reproduccion: " + frame + "% de 100%");
                }
               }
        };
        //se inicia la animacion
        tiempo.schedule(task,0,speed); 
    }
}

//detiene la animacion
public void stopAnimation() {
    tiempo.cancel();
    task.cancel();
}
     
/* Metod que muestra una ventana de dialgo para añadir "archivos" al reproductor
* hace uso del metodo anterior "setvideo"
*/
public String Abrir_mp3(){
    JFileChooser fileChooser = new JFileChooser();
    fileChooser.setFileFilter(filter);
    int result = fileChooser.showOpenDialog(null);  
    if ( result == JFileChooser.APPROVE_OPTION ){
        try {   
            //si se esta reproduciendo un mp3, se detiene
            if(todo_ok){this.STOP();}
            //se asigna a mediaURL el archivo de video seleccionado
            URL url = fileChooser.getSelectedFile().toURL();   
            //se coloca el nombre de la cancion en la variable file
            this.file= fileChooser.getSelectedFile().getName();
            //se asigna el mp3 al reproductor
            mediaPlayer = Manager.createRealizedPlayer( url );
            //se coloca a true
            this.todo_ok=true;          
         } 
         catch (NoPlayerException ex) {
            Logger.getLogger(mp3.class.getName()).log(Level.SEVERE, null, ex);
         } catch (CannotRealizeException ex) {
            Logger.getLogger(mp3.class.getName()).log(Level.SEVERE, null, ex);
         }            catch (IOException ex) {
            Logger.getLogger(mp3.class.getName()).log(Level.SEVERE, null, ex);
         } 
        }
        return "Reproductor mp3 - " + this.file;
    }
}

Explicacion: Como se ve en el codigo, este reproductor tiene los controles basicos para  reproducir PLAY y detener STOP el archivo mp3, ademas unos metodos para animar el jSlider y asi ver el avance en la reproduccion, el metodo Abrir_mp3(); te presenta una ventana de dialogo para que puedas buscar tu archivo MP3 y reproducirlo, todo esto desde una interfaz grafica. El codigo esta bastante comentado.

3. Ahora para implementar este codigo en la interfaz, debes hacer lo siguiente:
Creas una instancia a nuestra clase mp3.java y añades los metodos a sus controles correspondientes.

private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) {
    //abrir mp3
        this.setTitle(mimp3.Abrir_mp3());
}

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
        //dale play
        jLabel1.setText(mimp3.PLAY(jSlider1));
}

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
       //detener
        this.setTitle(mimp3.STOP());
        jLabel1.setText("Detenido");
}
// instancia a la clase mp3.java    
mp3 mimp3 = new mp3();

Y eso es todo, aqui puedes ver el reproductor funcionando
Aqui el video para una mejor explicacion
esta es la base para reproductores mas trabajados, como por ejemplo mi version personal del reproductor winamp, aun en desarrollo, pero cuando lo termine lo subire para compartirlo con todos


No puede faltar el codigo fuente del proyecto en netbeans 6.0
Click para descargar
Alguna duda, no dudes en preguntar, pero recuerda que puedo aconsejarte pero no realizar todo el trabajo por ti, como dijo el profe Escalante, solo HAY QUE TENER GANAS

continue reading

1/5/10

Crear applets con netbeans (Los *.JAR)

JAN29


Cuando realizamos nuestros applets en Netbeans, como vimos en un sencillo ejemplo anterior, no basta utilizar una sola clase, los applets mas complejos cuentan con varias clases los cuales tenemos que empaquetar en *.JAR y asi mismo algunos applets tambien utilizan librerias (*.jar) de otras personas. El objetivo de este tutorial es el de mostrar como crear un applets desde netbeans 6.0 empaquetarlo y utilizarlo desde un navegador web.

El proyecto:
1. Crea un nuevo proyecto en netbeans, JAVA - JAVA APLICATION, llamalo "javaapplet".
2. En el proyecto que se crea, elimina el archivo MAIN, ya que no lo necesitamos.
3. Crea un nuevo JAppletForm, clic derecho sobre el paquete "javaapplet" y NEW - JAppletForm... llama a esta nueva clase "interfaz"
Si no encuentras esa opcion, debes escoger NEW - OTHER... y en la ventana que te aparece, escoges SWING GUI FORMS - JAPPLET FORM.
4.Al nuevo jAppletForm: Interfaz, añade los siguientes controles:

5. Crea una nueva clase; New - Java Class..., y llamalo "imagenNET.java" añade el siguiente codigo:


package javaapplet;
import java.awt.Dimension;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.URL;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
/**
 * @web http://jc-mouse.blogspot.com/
 * @author Mouse
 */
public class imagenNET extends javax.swing.JLabel {
    
   String imagen;
   BufferedImage _image;    
     
    public imagenNET(String i,Dimension d){
        this.imagen=i;
        this.setBounds(0, 0, (int) d.getWidth(),(int) d.getHeight());
        cargar_imagen();
    }    
    /* carga la imagene de la pagina en memoria */   
    public void cargar_imagen(){    
            try {
                URL _url = new URL(this.imagen);
                _image = ImageIO.read(_url);
            } catch (IOException ex) {
                Logger.getLogger(imagenNET.class.getName()).log(Level.SEVERE, null, ex);
            }
            ImageIcon imagenFondo = new ImageIcon(_image);
            this.setIcon(imagenFondo);
            this.repaint();
    }      
}
Esta clase, que se extiende de un JLabel,  lo unico que hace, es añadir una imagen desde internet a este objeto.
6. Ya solo queda añadir un evento al JButton de la clase interfaz y colocar el siguiente evento:

El proyecto ya esta terminado, y lo ejecutamos desde netbeans para ver que este todo bien. Para generar los .class y el . JAR, debemos hacer clic derecho sobre el proyecto y elegir "Clean and build"

Luego cuando genero los class necesarios, para ejecutar el applet, clic derecho sobre la clase principal que tenga el metodo runable, en este caso nuestra clase "interfaz" y escogemos "Run File"
El applet se ejecuta desde el AppletViewer de java, como se ve en la imagen de abajo

Implementar el applet en un navegador web.
Cuando utilizamos la opcion "Clean And Build", netbeans generos todos los archivos necesarios para implementar el applet en navegadores web. Si se fija en la pestaña Files, podra ver que los archivos principal que necesitamos es el "javaapplet.jar", y el IDE,  tambien genero el archivo HTML correspondiente.

Son estos dos archivos que utilizaremos, copialos a una misma carpeta y abre el archivo HTML con el bloc de notas. Modifica el codigo HTML de la siguientye forma:


<HTML>
<HEAD>
   <TITLE>Applet HTML Page - by mouse</TITLE>
</HEAD>
<BODY>
<APPLET code="javaapplet.interfaz" archive="javaapplet.jar" width=650 height=600></APPLET>
</BODY>
</HTML>

En la etiqueta code, especificamos el paquete (javaapplet) y seguido de un punto, la clase principal que se ejecuta primero (interfaz).
En la etiqueta Archive, colocamos el nombre del paqute (javaapplet.jar), si este proyecto utilizara mas de un paquete, entonces colocamos los nombres de todos los paquetes seguidos de una coma, por ejemplo
archive="javaapplet.jar, otralibreria.jar, yotromas.jar"
Tambien especificamos el tamaño del applet con las etiquetas width y height.

IMPORTANTE: Este applet funciona correctamente desde el appletviewer, pero no funcionara desde un navegador web, esto debido a que ciertos applets, al hacer uso de recursos de la pc, o en este caso al tratar de conectarse a internet  para cargar una imagen, interfiere con la seguridad del equipo y por tanto el navegador no permite que se ejecute, para evitar esto, debemos FIRMAR DIGITALMENTE el applet para asi otorgarle los permisos necesarios para su correcta ejecucion. Este tuto no trata de firmas, eso se vera en otro tutorial.

No todos los applets necesitan contar con una firma digital para su ejecucion.

Cuando ejecutamos el applet ya con firma desde un navegador web, este nos informa de una aplicacion que desea ejecutarse, osea nos pide permiso.

Aqui tenemos el applet firmado y ejecutandose desde un navegador web (Firefox)
El videotutorial
Para descargar el proyecto en netbeans 6.0, el codigo fuente, los applets con el html firmado y no firmado para que se vea la diferencia entre ambos, el *.Jar que esta firmado, tiene una validez de 120 dias hasta caducar contando desde hoy (1 de mayo)
Click para descargar

¿me falto algo?

continue reading

28/4/10

Convertir PDF a JPG en Java

JAN29


Ahora presento un pequeño codigo para convertir documentos PDF a imagenes (*:JPG), para esta aplicacion, utilize las siguientes librerias:


- pdfbox-1.1.0 : Web: http://pdfbox.apache.org/download.html
- fontbox-1.1.0: La misma que la de arriba, solo hay que fijarse bien
- commons-logging-1.1.1 : Web: - http://commons.apache.org/logging/download_logging.cgi

Para continuar y ejecutar este proyecto, necesitas descargar esas librerias e instalarlas en Netbeans o en el IDe que utilices para programar, para instalar nuevas librerias a Netbeans, clic aqui.

Proyecto: Esta dividido en dos metodos y se ejecuta desde consola

Primer metodo: Este metodo convierte cada hoja del archivo PDF en imagenes con el formato JPG, recibe como parametro de entrada el "path" o sea la ruta de donde leera el archivo PDF, ejemplo: "e:/temppdf/", el segundo parametro es el "pdf", el nombre del archivo a convertir, ej: "Basilea.pdf".


/* Convierte el documento PDF a imagen con un tamaño grande*/
    public void Convertir_1(String path, String pdf){
    try {     
        PDDocument document = null;
        //se carga el documento
        document = PDDocument.load(new File(path + pdf));
        //se obtiene el numero de paginas del PDF
        int numero_paginas = document.getNumberOfPages();
        System.out.println("texto: " + document.getNumberOfPages());
        //Se capturan todas las paginas
        List pages = document.getDocumentCatalog().getAllPages();
        //un ciclo repetitivo para crear todas las imagenes
        for(int i=0; i<=numero_paginas-1;i++){
            System.out.println( "creando imagen - " + i);
            //se obtiene la pagina "i" de n paginas
            PDPage page = (PDPage)pages.get( i );
            //se convierte la hoja pdf a imagen y se coloca en memoria
            BufferedImage image = page.convertToImage();
            // se escribe a imagen en disco
            ImageIO.write(image, "jpg", new File( path + "tmp_" + i + ".jpg"));
            System.out.println( "imagen [" + i + "] creada");
        }
        document.close();//cerramos el pdf
    } catch (IOException ex) {
        Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
    }  
    }
Este metodo guarda las imagenes convertidas en la misma carpeta donde esta el PDF, lee la cantidad de paginas que tiene el archivo y utilizando un ciclo FOR, va convirtiendo y guardando pagina por pagina, este metodo crea las imagenes de un tamaño grande

Segundo metodo: Este metodo convierte cada hoja del archivo PDF en imagenes con el formato JPG, pero antes obtiene el tamaño de la hoja del archivo PDF y "escala" la imagen capturada por el API,  recibe como parametro de entrada el "path" o sea la ruta de donde leera el archivo PDF, ejemplo: "e:/temppdf/", el segundo parametro es el "pdf", el nombre del archivo a convertir, ej: "Basilea.pdf".



/* Convierte el documento PDF a Imagen, escalando el archivo al
      tamaño de las hojas del PDF*/
    public void Convertir_2(String path, String pdf){
    try {
        PDDocument document = null;
        //se carga el documento
        document = PDDocument.load(new File(path + pdf));
        //se obtiene el numero de paginas del PDF
        int numero_paginas = document.getNumberOfPages();
        System.out.println("texto: " + document.getNumberOfPages());  
        //Se capturan todas las paginas
        List pages = document.getDocumentCatalog().getAllPages();
        //un ciclo repetitivo para crear todas las imagenes
        for(int i=0; i<=numero_paginas-1;i++){
            System.out.println( "creando imagen - " + i);
            //se obtiene la pagina "i" de n paginas
            PDPage page = (PDPage)pages.get( i );
            //se convierte la hoja pdf a imagen y se coloca en memoria
            BufferedImage image = page.convertToImage();
            //ancho y alto de la pagina pdf
            int w = (int) document.getPageFormat(i).getWidth();
            int h = (int) document.getPageFormat(i).getHeight();
            //se crea una nueva imagen en memoria con el tamaño de la hoja pdf
            BufferedImage escala = new BufferedImage(w,h, BufferedImage.TYPE_INT_RGB);
            Graphics2D graphics2D = escala.createGraphics(); 
            graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION,RenderingHints.VALUE_INTERPOLATION_BILINEAR); 
            //se añade la imagen
            graphics2D.drawImage(image, 0, 0, w, h, null);
            // se escribe a imagen en disco
            ImageIO.write(escala, "jpg", new File( path + "tmp_e" + i + ".jpg"));
            System.out.println( "imagen [" + i + "] creada");
        }
        document.close();//cerramos el pdf
    } catch (IOException ex) {
        Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
    }  
    }

Al  igual que el primer metodo, utiliza un ciclo FOR para recorrer todo el documento.

Con unos cuantos cambios al codigo, puede convertirse el archivo PDF a cualquier tamaño, por ejemplo:


El codigo mas ejemplos en el siguiente enlace
Click para descargar

continue reading

22/4/10

Graficas con java y JFreeChart

JAN29


En esta ocasion les presento un codigo para crear graficas en java con la libreria OpenSource jFreeChart, esta libreria nos permite crear todo tipo de graficas como se puede ver en la imagen de abajo
Puedes descargarte la libreria desde la pagina del proyecto http://www.jfree.org/jfreechart/,

INSTALACION
1. Una vez que descargaste el archivo ZIP, debes descomprimirlo en algun lugar del disco duro, por ejemplo en c:/java/librerias/jfreechart-1.0.13
2. Con netbeans abierto, dirigete a TOOLS - LIBRARIES o a HERRAMIENTAS - LIBRERIAS.
3. En la ventana que aparece le das a "new library.." y te mostrara una pequeña ventana, en esa ventana le das un nombre a la libreria para poder reconocerla despues, yo le puse "graficos", tu puedes colocar el nombre que desees.
4. Presionas el boton AÑADIR JAR y buscas los siguientes archivos jfreechart-1.0.13 y jcommon-1.0.16 y los añades uno por uno, despues presionas OK y listo

EL PROYECTO EN NETBEANS
1. Crea un nuevo proyecto en netbeans llamalo "graficas", luego debes añadir las librerias al proyecto, clic derecho sobre la carpeta "libraries" como se ve en la imagen y escoges Add Library, en la ventana que aparece, busca la libreria, en mi caso la llame GRAFICAS, asi que busco ese nombre y le digo Add Library
Si seguiste todos los pasos, debes tener algo como la imagen de abajo:
2. Ahora crea un nuevo JFrame en el proyecto, añade un JPanel: CONTENEDOR, dos JButton CREAR Y GUARDAR y situalos como se ve en la imagen:

3. Crea una nueva clase, "Grafico.java" y añade el siguiente codigo:


import java.awt.Dimension;
import java.awt.image.BufferedImage;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.*;
import java.io.*;
import javax.swing.ImageIcon;
import javax.swing.JFileChooser;
import javax.swing.JLabel;
import org.jfree.chart.ChartUtilities;
import org.jfree.data.category.DefaultCategoryDataset;
/**
 * @web http://jc-mouse.blogspot.com/
 * @author Mouse
 */
public class grafico {
    
    private BufferedImage _image ;//para la imagen en memoria
    private JFreeChart grafico ;// el grafico
    private Dimension d;//dimension del grafico
    
    public grafico(){
    }
    /* Crea el grafico */
    public void crear_grafico_de_barras(Dimension d, int[] v, String[] arg1, String arg2[],String[] data){
        this.d= d;          
        DefaultCategoryDataset dataset = new DefaultCategoryDataset();
        //se llenan los datos
        for(int i=0; i<=v.length-1;i++){
            dataset.setValue(v[i], arg1[i], arg2[i]);
        }      
        //se crea el grafico
        grafico = ChartFactory.createBarChart3D(data[0], data[1], data[2], dataset, PlotOrientation.HORIZONTAL , true, false, true);
        //se coloca el grafico en memoria
        _image = grafico.createBufferedImage(this.d.width,this.d.height);
        System.err.println("grafico creado");     
    }
    
    /* carga la imagen que esta en memoria en el objeto jLabel */
    public void cargar_grafico(JLabel lb){
        ImageIcon imagenFondo = new ImageIcon(_image);  
        lb.setIcon(imagenFondo);
        lb.repaint();
    }  
    /* presenta la ventana de dialogo "guardar" y salva el grafico generado en JPG */
     public void Guardar(){
       JFileChooser fileChooser = new JFileChooser();
       int result = fileChooser.showSaveDialog(null);
       if ( result == JFileChooser.APPROVE_OPTION ){ 
            try {
                //se obtiene la direccion donde se guardara la imagen
                String url = fileChooser.getSelectedFile().toString();
                //Se guarda la imagen
                ChartUtilities.saveChartAsJPEG(new File(url + ".jpg"), grafico, d.width, d.height);
            } catch (IOException ex) {
                Logger.getLogger(grafico.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
   }   
}


4. Como siguiente paso, debes implementar esta clase en el JFrame, el codigo para los JButton es el siguiente


private void CREARActionPerformed(java.awt.event.ActionEvent evt) {
        //tamaño del grafico
        Dimension d = CONTENEDOR.getSize();//toma el tamaño del contenedor
        //se crean los datos
        int[] valores = {1000,2011,3030,1569,2688,4587}; 
        String[] arg1 = {"Enero","Febrero","Marzo","Enero","Febrero","Marzo"};
        String[] arg2 = {"Visitas","Visitas","Visitas","Hits","Hits","Hits"};
        //titulo, lateral 1, lateral 2
        String[] data = {"Blog de Mouse","Primer Trimestre","Visitas"};
        //se crea el grafico
        migrafico.crear_grafico_de_barras(d, valores, arg2, arg1, data);
        //se crea un jlabel para colocar el grafico
        JLabel j = new JLabel();
        j.setBounds(0, 0, d.width, d.height);
        //se carga el grafico de memoria
        migrafico.cargar_grafico(j);
        //se añade al contenedor
        CONTENEDOR.add(j);
        this.repaint();
}

private void GUARDARActionPerformed(java.awt.event.ActionEvent evt) {
       migrafico.Guardar();
}

/**
 * @param args the command line arguments
*/
grafico migrafico = new grafico();


La forma en que se pasa los parametros a la clase "graficos.java", es mediante el uso de Array, se utilizan 4 array, un array de enteros para pasar los valores numericos, otros dos array de tipo String arg1 y arg2, donde se coloca los valores sobre los cuales se llevara a cabo la comparacion y agrupacion de datos, estos tres primeros array, deben tener la misma longitud, por ultimo un array de tipo String de  3 elementos en el cual se coloca, primero el titulo, seguidos del texto que se coloca en los lateras del grafico; por ejemplo, 
int[] valores = {1000,2011,3030,1569,2688,4587};, se le esta pasando un array con 6 elementos, entonces los arrays arg1 y arg2 , deben tener tambien seis elementos.

En el ejemplo de abajo, tenemos el mismo grafico, con los mismos datos, pero con diferente agrupacion, el primero agrupado entre "visitas y hits"  y el segundo entre "meses", esto solamente se hizo, inviertiendo "arg1"  y "arg2" en la llamada al metodo crear_grafico_de_barras();

continue reading

15/4/10

Crear PDF desde java

JAN29

En esta ocasion crearemos un archivo PDF desde java utilizando el IDE netbeans 6.0, y la libreria ITEXT. pero y ¿que es Itext?

Segun SantaWikipedia:

iText es una biblioteca Open Source para crear y manipular archivos PDF, RTF, y HTML en Java. Fue escrita por Bruno Lowagie, Paulo Soares, y otros; está distribuida bajo la Mozilla Public License con la LGPL como licencia alternativa.


El mismo documento puede ser exportado en múltiples formatos, o múltiples instancias del mismo formato. Los datos pueden ser escritos a un fichero o, por ejemplo, desde un servlet a un navegador web.


Más recientemente, ha sido extendida a una biblioteca PDF de propósito general, capaz de rellenar formularios, mover páginas de un PDF a otro, y otras cosas. Estas extensiones son a menudo mutuamente excluyentes. Una clase te permite rellenar en formularios, mientras una clase diferente e incompatible hace posible copiar páginas de un PDF a otro.

Basta de teoria, vamos a lo que interesa que es el codigo, lo que debes hacer primero claro esta, es bajarte esa biblioteca desde este enlace, la ultima version es la itext 5.0.2, baja el *.jar o si lo deseas puedes bajarte todo las fuentes mas documentacion incluida, obvio que en ingles. Una vez que bajaste la libreria, debes instalar esta en Netbeans, si no sabes como, te recomiendo te des una vuelta por aqui "instalar nuevas librerias a netbeans".

El proyecto:

1.- Crea un nuevo proyecto en netbeans, dale un nombre, para este ejemplo "javapdf", añade un JFrame:editor, y coloca los objetos y sus respectivos nombres como se ve en la captura de pantalla:

2. Crea una nueva clase "javapdf.java" y añade el siguiente codigo:


package javapdf;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.PdfWriter;
//archivos
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.util.logging.Level;
import java.util.logging.Logger;
//librerias ajenas a itext
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.filechooser.FileNameExtensionFilter;
/**
 * @web http://jc-mouse.blogspot.com/
 * @author Mouse
 */
public class javapdf {
   
    private File ruta_destino=null;
    
    public javapdf(){    
    }
    
    /* metodo que hace uso de la clase itext para manipular archivos PDF*/
    public void crear_PDF(String t, String a, String s, String k, String c){
        //abre ventana de dialogo "guardar"
        Colocar_Destino();
        //si destino es diferente de null
        if(this.ruta_destino!=null){
            try {
                // se crea instancia del documento
                Document mipdf = new Document();
                // se establece una instancia a un documento pdf
                PdfWriter.getInstance(mipdf, new FileOutputStream(this.ruta_destino + ".pdf"));
                mipdf.open();// se abre el documento
                mipdf.addTitle(t); // se añade el titulo
                mipdf.addAuthor(a); // se añade el autor del documento
                mipdf.addSubject(s); //se añade el asunto del documento
                mipdf.addKeywords(k); //Se agregan palabras claves  
                mipdf.add(new Paragraph(c)); // se añade el contendio del PDF
                mipdf.close(); //se cierra el PDF&
                JOptionPane.showMessageDialog(null,"Documento PDF creado");
            } catch (DocumentException ex) {
                Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
            } catch (FileNotFoundException ex) {
                Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
            }            
        }        
    }
    /* abre la ventana de dialogo GUARDAR*/
    public void Colocar_Destino(){
       FileNameExtensionFilter filter = new FileNameExtensionFilter("Archivo PDF","pdf","PDF");
       JFileChooser fileChooser = new JFileChooser();       
       fileChooser.setFileFilter(filter);
       int result = fileChooser.showSaveDialog(null);
       if ( result == JFileChooser.APPROVE_OPTION ){   
           this.ruta_destino = fileChooser.getSelectedFile().getAbsoluteFile();
        }
    }    
}

El codigo de la clase ya esta comentado y creo que es bastante obvio. para un usuario intermedio de java sera de facil comprension.

3. Para terminar, debes implementar esta clase en el JFrame, asi:
y eso es todo, te crea el PDF como se ve en la captura de pantalla

continue reading

14/4/10

[Respuesta] Cerrar JOptionPane automaticamente

JAN29

Bueno tratando de dar una respuesta "aceptable" a la pregunta de visitante a mi blog, que tenia o tiene la duda de "como cerrar automaticamente un JOptionPane transcurrido un cierto tiempo",  problema que me parecio sencillo al principio, controlar el tiempo no habia problema, con un Timer basta y sobra, pero despues de investigar un poco no encontre un comando en java para cerrar el JOptionPabe, el hide() no me funciono, el dispose() no existe para esta clase, el setvisible() no jala, asi que quedandome sin opciones, recorde un consejo de un viejo amigo, "cuando tengas un problema que al parecer no tiene solucion, da un paso atras para ampliar tu vision y asi encontraras la solucion mas facilmente",asi que ampliando mi mundo y  mirando mejor mi problema, busque una solucion alternativa, hice uso de la clase Robot, esta clase simula acciones que puede realizar el usuario como pulsaciones de taclas o movimientos del raton e incluso clics del mismo raton, puede no ser la mejor solucion, pero funciona.

El ejemplo que realice para esta demostracion, es una aplicacion trivial, que muestra una pregunta en un JOptionPane y desaparece despues de un tiempo.

La clase en cuestion, la llame "tictac.java", si lo se, soy un asco para colocar nombres  mis clases, pero bueno, esta clase tiene el metodo mostrar_pregunta(String p, int d).  recibe como parametros la pregunta en cuestion y el tiempo en segundos que se desea mostrar el JOptionPane en pantalla, pasado este tiempo, que es controlado por el metodo Comenzar_a_contar(), el JOptionPase se cerrara automaticamente haciendo uso de la clase Robot, que simula la presion de la tecla escape KeyEvent.VK_ESCAPE, la respuesta se almacena en una variable de tipo String "respuesta", para su uso posteriormente.

import java.awt.AWTException;
import java.awt.Robot;
import java.awt.event.KeyEvent;
import java.util.Timer;
import java.util.TimerTask;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
/**
 * @web http://jc-mouse.blogspot.com/
 * @author Mouse
 */
public class tictac {
//para la animacion    
private Timer tiempo ;
private TimerTask task;
//para almacenar la respuesta
private String respuesta=null;
private int duracion = 3;//tiempo
private JFrame padre;
private boolean isrun=false;

    public tictac(){
    }
    
    public void mostrar_pregunta(String p, int d){
        this.duracion = d;
        //comienza a contar el tiempo
        Comenzar_a_contar();
        //se muestra el JOptionPane
        this.respuesta = JOptionPane.showInputDialog(this.padre, p , JOptionPane.QUESTION_MESSAGE);
        //si contesto antes de que acabe el tiempo
        if(isrun){
            detener();
            actualizar();
        }       
        //System.out.println("Respuesta " + this.respuesta);
    }
    
    /* se ejecuta cuando acaba el tiempo */
    public void time_is_over(){    
        try {    
            Robot robot = new Robot();
            //se asigna una respuesta vacia
            this.respuesta = "No tengo idea";
            // se actualiza
            actualizar();
            //se presiona la tecla escape
            robot.keyPress(KeyEvent.VK_ESCAPE);
        } catch (AWTException ex) {
            Logger.getLogger(tictac.class.getName()).log(Level.SEVERE, null, ex);
        }         
    } 
    
    /* actualiza los objetos del frame padre */
    public void actualizar(){
     //se añade la respuesta al objeto label de miframe
      miframe.lbRes.setText("Respuesta: " + this.respuesta);
      miframe.lbtiempo.setText("0");
      miframe.lbRes.repaint();   
    }
    
    /* metodo que lleva el tiempo disponible para contestar*/
    public void Comenzar_a_contar() {   
           isrun=true;
           tiempo = new Timer();
           task = new TimerTask() {
               int contador=0;
               public void run() {
                   contador++;
                   miframe.lbtiempo.setText(String.valueOf(contador));
                   System.out.println("tiempo transcurrido: " + contador);
                   if(contador == duracion){
                        System.out.println("Se acabo el tiempo, mala suerte");
                        time_is_over();
                        detener();
                   }
               }    
           };        
           tiempo.schedule(task,0,1000);    
    }
    
    /* detiene la animacion */
     public void detener() {   
            isrun=false;
            tiempo.cancel();
            task.cancel();
    }        
}

Este metodo tiene un contra, la aplicacion tiene que estar siempre visible, caso contrario no funciona, la clase robot realiza la pulsacion de la tecla escape, pero con la aplicacion que se encuentre en primer plano, al perder el foco la aplicacion en java, pierde el evento de pulsacion y el JOptionPane continuara visible.

Asi que como respuesta alternativa, puede utilizarse un JFrame que tenga la apariencia de un JOptionPane, si no es estrictamente necesario utilizar la clase JOptionPane, el funcionamiento es el mismo, con la diferencia de que ya no es necesario el uso de la clase Robot para cerrar el objeto, ya que un Jframe cuenta con el metodo dispose() para cerrar la ventana.

El video para mas detalles


y no puede faltar el codigo fuente, en Netbeans 6.0

continue reading

Post recomendado