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

6/7/10

Reproductor MP3 en java con Playlist

JAN29


Como muchos me pidieron un reproductor de mp3 con un playlist, ahora dejo a consideracion de los programadores el codigo fuente completo hecho con netbeans 6.0 y la api de Java Media.

Hasta la fecha ya deje muchos tutoriales sobre como utilizar esa API, asi que no veo la razon de redundar sobre lo mismo, por ese motivo en esta ocasion solamente dejare el codigo fuente para que sea examinado por ustedes, claro esta el codigo esta extra comentado y lo mas simple posible, y si siguen los tutos que hice creo que no habra donde perderse, ademas de que examinar el codigo fuente y ver como funciona  es una buena practica de INGENIERIA INVERSA que todo programador debe conocer.

Este reproductor tiene la capacidad de abrir archivos mp3 y cargarlos en un playlist para poder reproducirlos uno por uno, ademas tiene implementados los controles Preview y Next para poder pasar de una cancion a otra  con un simple clic, las canciones pueden ser reproducidas desde el boton PLAY o haciendo doble clic en el archivo seleccionado en el playlist. 

Dicho esto no queda mas que dejar un video de como quedo el reproductor
La interfaz que se ve es gracias al skin de Substance, esta libreria junto a las demas librerias de JMF estan en el RAR, asi que no queda mas que decir sino que a bajarselo y estudiarlo.
Click para descargar
Enlaces vivitos y coleando ;)

continue reading

29/6/10

Guardar/Cargar configuración en una aplicacion

JAN29

Muchas veces cuando hacemos un programa y queremos que las modificaciones que realizamos en nuestra aplicacion a modo de personalización en tiempo de ejecucion , como colores, tipo de letra, tamaño de la letra, color de la letra, etc, queremos que estas se guarden para no tener que realizar los mismos cambios una y otra vez.
Maneras de realizar esto creo que hay muchas, la mas sencilla que se me ocurre es utilizar un archivo de texto donde guardar nuestros cambios y cargarlos desde ahi a la aplicacion cada vez que iniciemos el programa.

Que necesitas
  • Netbeans 6.0 o  sup
  • Un editor de texto
  • imaginacion

Proyecto
Lo que haremos sera crear una aplicacion en netbeans, el cual contara con dos interfaces, la primera, la principal, donde se colocaran los cambios que hagamos, la segunda interfaz, nos servira como un panel de configuracion, esta aplicacion, al momento de iniciar, cargara un archivo de texto donde se encontraran las configuraciones de color de los paneles (FONDO, PANEL1, PANEL2, PANEL3), y tipo, tamaño, estilo y color de fuente de letra, haciendo un total de 8 configuraciones que podremos guardar y cargar en el programa.
Si el archivo de configuracion que llamaremos "miconfiguracion.txt" no existe, el programa creara uno con una configuracion por defecto y cargara este en la aplicacion. este archivo se encuentra o se creara junto al JAR de la aplicacion, en el mismo directorio de este.

Manos a la obra

1. Nuestro proyecto se llamara "configuracion", crea este en netbeans y añade dos JFrames "Aplicacion.java" y "Configurar.java", añade una tercera clase "miconfiguracion.java".


2. Ahora diseña la interfaz para "aplicacion.java" como la imagen de abajo, recuerda los nombres en rojo son importantes, colocalos como estan:
3. Diseña la interfaz para "configurar,java", esta interfaz nos servira como un panel de configuracion donde podremos realizar nuestros cambios.

4. Si llegaste hasta aqui, ahora toca escribir el codigo que nos permita manejar nuestro archivo de configuracion "miconfiguracion.txt", este archivo de texto, esta compuesto de 8 campos separados por el caracter "/", estos 8 campos corresponden a las 8 modificaciones que podemos realizar en la aplicacion, /Color de fondo/ Color de panel 1/ Color de panel 2/ Color de Panel 3/ Tipo de fuente/ Estilo de la fuente (normal, negrilla, cursiva, cursiva negrilla)/ Color de la fuente/ Tamaño de la fuente
No necesitas crear este archivo, lo creara el mismo programa que estamos haciendo, la clase para controlar las modificaciones se llama "miconfiguracion.java", el codigo es:


package configuracion;
import java.awt.Color;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.StringTokenizer;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JButton;
import javax.swing.JColorChooser;
/**
 * @web http://jc-mouse.blogspot.com/
 * @author Mouse
 */
public class miconfiguracion {
    //configuracion por defecto
    private String default_configuracion = "/-1118482/-1118482/-1118482/-1118482/Arial/1/-16777063/12/";
    //direccion del archivo de texto
    private String archivo_de_configuracion=System.getProperty("user.dir") + "/miconfiguracion.txt";
    //Para leer archivo de texto
    private File archivo = null;
    private FileReader fr = null;
    private BufferedReader br = null;
    // para escribir en archivo
    private FileWriter fichero = null;
    private PrintWriter pw = null;
    //almacena los valores leidos del archivo de miconfiguracion.txt
    // donde los valores del vector:
    // 0 a 3 -> son los colores de fondo, panel1, panel2 y panel3
    // 4     -> Tipo de fuente
    // 5     -> Estilo de fuente
    // 6     -> Color de fuente
    // 7     -> Tamaño de fuente
    private Vector<String> vector = new Vector<String>(10,2);
    
    public miconfiguracion() {      
        try {
            Configuracion();
        } catch (FileNotFoundException ex) {
            Logger.getLogger(miconfiguracion.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(miconfiguracion.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    /* abre un archivo de texto y lee el contenido  */
    private void Configuracion() throws FileNotFoundException, IOException{
        String configuracion="";//contenido del archivo         
        //el archivo se encuentra en el mismo directorio que la aplicacion         
        archivo = new File(archivo_de_configuracion);
        //si el archivo existe leemos la configuracion
        if(archivo.exists()){          
            configuracion = Leer_configuracion();
        }
        else{//sino existe lo creamos
           Guardar_Configuracion(default_configuracion);
           configuracion = Leer_configuracion();
        } 
        // el string que se retorno en "configuracion", lo separa mediante tokens y lo almacena
        // en una variable de tipo vector
        token(configuracion);
    }
    
    /* ABRE UN ARCHIVO DE TEXTO Y LEE EL CONENIDO EL CUAL RETORNA EN UN STRING */
    private String  Leer_configuracion() throws FileNotFoundException, IOException{
     String tmp_c="";
     fr = new FileReader(archivo);
     br = new BufferedReader(fr);
     // Lectura del fichero de texto
     String linea = null;
     while ((linea = br.readLine()) != null) {
         tmp_c = tmp_c + linea;
     }   
     fr.close();
     return tmp_c;
    }
    
    /* separa la configuracion y los añade al vector */
    private void token(String s){
     //separamos los valores leidos en tokens     
     StringTokenizer tokens = new StringTokenizer(s,"/");
     while(tokens.hasMoreTokens()){
        vector.addElement(tokens.nextToken());
     }           
    }
    
    /* MUESTRA LA VENTA DE DIALOGO [ESCOGER COLOR]*/
    public Color Escoger_Color(java.awt.event.ActionEvent evt){
        Color color = JColorChooser.showDialog(null,"Escoja un color",((JButton)evt.getSource()).getBackground());
        if(color!=null){return color;}else{return new Color(-1118482);}
    }
    
 //guarda las configuracion en el archivo de texto "miconfiguracion.txt"
 public boolean Guardar_Configuracion(String t){   
     boolean ok = false;
        try {
            fichero = new FileWriter(archivo_de_configuracion);
            pw = new PrintWriter(fichero);
            pw.println(t);
            ok = true;     
            fichero.close();
        } catch (IOException ex) {
            Logger.getLogger(miconfiguracion.class.getName()).log(Level.SEVERE, null, ex);
        }
        return ok;
  }
    
   /* DEVUELVE LOS VALORES ALMACENADOS EN EL VECTOR */ 
   /*  inicio */
   public int Color_de_Fondo(){
        return Integer.valueOf(vector.get(0).toString());
    }
    
    public int Color_Panel1(){
        return Integer.valueOf(vector.get(1).toString());
    }
    
    public int Color_Panel2(){
        return Integer.valueOf(vector.get(2).toString());
    }
    
    public int Color_Panel3(){
        return Integer.valueOf(vector.get(3).toString());
    }
    
    public String Tipo_Fuente(){
        return vector.get(4).toString();
    }  
    
    public int Tipo_Estilo_Fuente(){
        return Integer.valueOf(vector.get(5).toString());
    }  
    
    public int Color_Fuente(){
        return Integer.valueOf(vector.get(6).toString());
    }
    
    public int Size_Fuente(){
        return Integer.valueOf(vector.get(7).toString());
    }
    /*  fin */
}

Un poco largo el codigo, pero es sencillo, consiste, en metodos para leer el archivo de texto, si no existe lo crea, despues utilizar el StringTokenizer para separar las configuraciones y cargarlos en un vector, para que estas esten disponibles en cualquier momento. Asi mismo el metodo Guardar_Configuracion(String t), recibe un string con la cadena que formaremos con las modificaciones hechas para salvar en el archivo de texto.

5. En la clase interfaz aplicacion.java, añade el siguiente codigo:


public void inicializar(){
        /* CONFIGURACION*/
        miconfiguracion mc = new miconfiguracion();
        //se carga la configuracion en los objetos
        this.setBackground(new Color(mc.Color_de_Fondo()));
        FONDO.setBackground(new Color(mc.Color_de_Fondo()));
        PANEL1.setBackground(new Color(mc.Color_Panel1()));
        PANEL2.setBackground(new Color(mc.Color_Panel2()));
        PANEL3.setBackground(new Color(mc.Color_Panel3()));
        Font f = new Font( mc.Tipo_Fuente(),mc.Tipo_Estilo_Fuente(),mc.Size_Fuente() );
        TEXTO.setFont(f);
        TEXTO.setForeground(new Color(mc.Color_Fuente()));
        /* -- */
    }
despues añade este en el constructor de la clase, para terminar, escribe en el evento de smConfigurar el siguiente codigo:

private void smConfigurarActionPerformed(java.awt.event.ActionEvent evt) {
    configurar c = new configurar();
    c.show();
}


6. Para terminar la aplicacion, en la clase interfaz configurar.java, declara


 private miconfiguracion mc = new miconfiguracion();
 private ButtonGroup buttongroup = new ButtonGroup();
 private int OpcionSel;

Despues añade en el constructor de la clase:


 public configurar() {
        initComponents();
        this.setLocationRelativeTo(null);  
        this.setTitle("Opciones de configuración...");
        buttongroup.add(opcion1);
        buttongroup.add(opcion2);
        buttongroup.add(opcion3);
        buttongroup.add(opcion4);
        
        /* carga la configuracion en los objetos*/
        //carga los colores en los jbutton
        cmd0.setBackground(new Color(mc.Color_de_Fondo()));
        cmd1.setBackground(new Color(mc.Color_Panel1()));
        cmd2.setBackground(new Color(mc.Color_Panel2()));
        cmd3.setBackground(new Color(mc.Color_Panel3()));
        //carga el tipo de letra
        for(int i=0;i<=cboTipo.getItemCount()-1;i++){
            if(mc.Tipo_Fuente().equals(cboTipo.getItemAt(i).toString())){
                cboTipo.setSelectedIndex(i);break;
            }
        }
        //carga el tamaño de la fuente
        for(int i=0;i<=cboSize.getItemCount()-1;i++){
            if(mc.Size_Fuente()==Integer.valueOf(cboSize.getItemAt(i).toString())){
                cboSize.setSelectedIndex(i);break;
            }
        }
        //carga el estilo en el JRadioButton correspondiente
        if(mc.Tipo_Estilo_Fuente()==0){opcion1.setSelected(true);}
        if(mc.Tipo_Estilo_Fuente()==1){opcion2.setSelected(true);}
        if(mc.Tipo_Estilo_Fuente()==2){opcion3.setSelected(true);}
        if(mc.Tipo_Estilo_Fuente()==3){opcion4.setSelected(true);}
        //carga el color de fondo
        cmdFuente.setBackground(new Color(mc.Color_Fuente()));
        /* fin configurar */
    }

Ahora el el JButton: cmdCambios, escribe el siguiente codigo:


private void cmdCambiosActionPerformed(java.awt.event.ActionEvent evt) {       
  /* SE GUARDA LA NUEVA CONFIGURACION */
  //color fondo/color panel1/color panel2/color panel3/Tipo fuente/estilo fuente/color fuente/tamaño fuente
  if(
     mc.Guardar_Configuracion("/"+cmd0.getBackground().getRGB()+"/"+
                                  cmd1.getBackground().getRGB()+"/"+
                                  cmd2.getBackground().getRGB()+"/"+
                                  cmd3.getBackground().getRGB()+"/"+
                                  cboTipo.getSelectedItem().toString()+"/"+
                                  OpcionSel+"/"+
                                  cmdFuente.getBackground().getRGB()+"/"+
                                  cboSize.getSelectedItem().toString()+"/"
                               ))
    {
        JOptionPane.showMessageDialog(this,"La nueva configuracion se guardo correctamente \nLos cambios se veran la proxima ves que inicie la aplicacion...");
     }        
}

finalmente, debes añadir los eventos en los objetos que declaramos mas arriba, este codigo no lo copies y pegues, sino fijate bien, donde debe ir cada instruccion


private void cmd3ActionPerformed(java.awt.event.ActionEvent evt) {
        cmd3.setBackground(mc.Escoger_Color(evt));
}

private void cmd2ActionPerformed(java.awt.event.ActionEvent evt) {
        cmd2.setBackground(mc.Escoger_Color(evt));
}

private void cmd1ActionPerformed(java.awt.event.ActionEvent evt) {
        cmd1.setBackground(mc.Escoger_Color(evt));
}

private void cmdFuenteActionPerformed(java.awt.event.ActionEvent evt) {
        cmdFuente.setBackground(mc.Escoger_Color(evt));
}

private void opcion1ActionPerformed(java.awt.event.ActionEvent evt) {
        OpcionSel =0;
}

private void opcion2ActionPerformed(java.awt.event.ActionEvent evt) {
        OpcionSel =1;
}

private void opcion3ActionPerformed(java.awt.event.ActionEvent evt) {
        OpcionSel =2;
}

private void opcion4ActionPerformed(java.awt.event.ActionEvent evt) {
        OpcionSel =3;
}

private void cmd0ActionPerformed(java.awt.event.ActionEvent evt) {
        cmd0.setBackground(mc.Escoger_Color(evt));  
}

ejecuta el proyecto, si no tienes ningun error debes tener algo como esto

Finalmente el codigo fuente para los mas vagos :)
Click para descargar

continue reading

6/6/10

jCalendar - Fechas conJava

JAN29


jCalendar es una libreria OpenSource que te permite manejar fechas en un entorno grafico. Esta libreria dispone de varias herramientas que facilitan el trabajo con la menor cantidad de codigo escrito por nosotros.

La web oficial del proyecto es http://www.toedter.com/en/jcalendar/index.html, se encuentra en la version 1.3.3 con solo 600kb de tamaño

Para instalar nuevas librerias en netbeans, leete este "tutorial Añadir/Instalar nuevas librerias en netbeans", una ves que tenemos instalado las librerias, debemos añadir las herramientas de jCalendar a la interfaz grafica de Netbeans, para esto sigue los sieguientes pasos:

1. Situate en la barra de herramientas Palette y realiza un clic derecho sobre esta, se despliega un menu y entonces escoge la opcion Palette Manager
2. En la ventana que aparece "Palette Manager", clic en el boton New Category... , te aparece otra pequeña ventanita "New Palette Category" y colocas nombre a la nueva paleta, en este caso jCalendar. y le dices OK

3. Esto te creara una nueva categoria en Palette, seleccionala y presiona el boton Add from JAR..., entonces busca donde instalaste la libreria JAR y seleciona el archivo jCalendar-1.3.3 y le dices NEXT
4.  Despues tienes que seleccionar todos los componentes, como se ve en la imagen y le dices NEXT, te volvera a preguntar donde quieres añadir estos nuevos objetos, entonces seleccionas nuestra paleta que creamos en el paso 2 y para terminar le dices FINISH.

5. Si seguiste todos los pasos, te debe aparecer una nueva paletta en la barra de herramientas Palette
Ya tenemos instalado y configurado nuestro componente jCalendar

Proyecto de prueba.

1. crea un nuevo proyecto en netbeans y añade un jFrame, despues a la interfaz añade el componente jDateChooser como se ve en la imagen
2. para personalizar un poco la fecha de jDateChooser, ingresa a sus propiedades (clic derecho -> properties) y busca la opcion dateFormatString, es ahi donde puedes colocar el formato de salida, por ejemplo yyyy/MM/dd.
3. Ejecuta la aplicacion

Eso es todo, ya podemos seleccionar una fecha graficamente con jCalendar sin escribir una sola linea de codigo.

Puedes encontrar mas informacion (en ingles) asi como ejemplo, en esta direccion http://flib.sourceforge.net/JCalendar/doc/tutorial.html


“Una imagen vale mil palabras”, pero consume mil veces mas memoria.

continue reading

3/6/10

Notepad+- con java

JAN29

En este feriado de corpus christi que ya se acaba, aprenderemos a crear un sencillo notepad al estilo de mouse, tendra  funciones basicas (abrir/guardar) y la capacidad de trabajar con varios documentos a la vez, a traves de pestañas como se ve en la imagen.

Se necesita:
  • Java
  • Netbeans 6.0
  • 15 minutos de su tiempo
Proyecto
El proyecto comprende:

Comencemos:

1. Cree un nuevo proyecto "texto" en netbeas, añada un JFrame: textoform.java y añade un menu (JMenubar) y sus respectivos Items, ademas añada un contendor JPanel y dentro de el un JTabbedPane:JTP, debe tener algo como esto:

OJO: Fijese en los nombres de los objetos y coloquelos como en la imagen

2. crea una nueva clase textoclass.java, esta clase nos permitira manipular archivos de texto (abrir/guardar) mediante una comoca ventana de dialogo (JFileChooser), el codigo que debes colocar dentro es el siguiente:


package texto;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.util.StringTokenizer;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.JTextArea;
import javax.swing.filechooser.FileNameExtensionFilter;
/**
 * @web http://jc-mouse.blogspot.com/
 * @author Mouse
 */
public class textoclass {    
//para leer
File archivo = null;
FileReader fr = null;
BufferedReader br = null;
//para escribir
FileWriter fichero = null;
PrintWriter pw = null;
//ruta absoluta del archivo a manipular
String ruta = "";
//filtro
private static FileNameExtensionFilter filter = new FileNameExtensionFilter("Archivo TXT","txt","TXT");

    public textoclass(){
    } 
    
    //abre un archivo de texto y lee el contenido linea por linea
    private String OpenFile(String ruta){
        String t="";//contenido del archivo
        try {         
            archivo = new File (ruta);
            fr = new FileReader (archivo);
            br = new BufferedReader(fr);
            // Lectura del fichero linea por linea
            String linea;
            while((linea=br.readLine())!=null)
                t = t + linea + "\n";
        }
      catch(Exception e){
         e.printStackTrace();
      }finally{         
         try{
            if( null != fr ){
               fr.close();
            }
         }catch (Exception e2){ 
            e2.printStackTrace();
         }
      }
        return t;
    }
    
    private void SaveFile(String t, String ruta){
    //se separa el texto cada salto de linea
    StringTokenizer st = new StringTokenizer(t,"\n");
    try
        {
            fichero = new FileWriter(ruta);
            pw = new PrintWriter(fichero);
            //se guarda linea por linea en el archivo
            while(st.hasMoreTokens()){
                String line = st.nextToken();
                pw.println(line);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
           try {
           if (null != fichero)
              fichero.close();
           } catch (Exception e2) {
              e2.printStackTrace();
           }
        }       
    }
    
    //segun la opcion muestra en pantalla una ventana de dialogo
    //para "abrir" o "guardar" un archivo
    public String  Dialog(String Opcion, JTextArea tArea){
        String nombre_archivo="";
        JFileChooser fileChooser = new JFileChooser();
        fileChooser.setFileFilter(filter);
        //ventana para "abrir un archivo", retorna FALSE si se abre
        if (Opcion.equals("Open")){
                int result = fileChooser.showOpenDialog(null);  
                if ( result == JFileChooser.APPROVE_OPTION ){
                    ruta = fileChooser.getSelectedFile().getAbsolutePath(); 
                    nombre_archivo = fileChooser.getSelectedFile().getName();
                    tArea.setText(OpenFile(ruta));
                }
        }
        //ventana para guardar un archivo
        else if (Opcion.equals("Save As")){                
                int result = fileChooser.showSaveDialog(null);
                if ( result == JFileChooser.APPROVE_OPTION ){
                    ruta = fileChooser.getSelectedFile().getAbsolutePath();
                    ruta = ruta + ".txt";
                    nombre_archivo = fileChooser.getSelectedFile().getName();
                    SaveFile(tArea.getText() ,ruta);
                    JOptionPane.showMessageDialog(null,"archivo guardado correctamente.");
                }
        }
        //aqui no muestra ninguna ventana, guarda automaticamente el archivo
        //respecto a un archivo previamente abierto
        else if(Opcion.equals("Save")){
            SaveFile(tArea.getText() ,ruta);
            JOptionPane.showMessageDialog(null,"archivo actualizado.");
        }       
        return nombre_archivo;
    }
}

3. ahora cree una nueva clase JTabbedPane_op.java, esta clase es la encargada de crear nuevas pestañas TABS en el JTabbedPane, asi como su respectivo jTextArea, asi mismo esta clase hace uso de la clase file.java que crearemos mas tarde, esta clase JTabbedPane_op, utiliza vectores para controlar y almacenar las diferenntes pestañas que se crearan, el codigo es:

package texto;
import java.util.Vector;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTextArea;
/**
 * @web http://jc-mouse.blogspot.com/
 * @author Mouse
 */
public class JTabbedPane_op {    
//vector para almacenar objetos jtextarea
private Vector vjta = new Vector(10,2);    
//vector para almacenar objetos tipo file
private Vector vfile = new Vector(10,2);
//objetos
JTextArea jta; 
JScrollPane scrollPane;
     
public JTabbedPane_op(){}
    
//crea un nuevo TAB en el JTabbedPane junto a un textarea
public void nuevo(JTabbedPane jtp){
    //se crea una nueva instancia de jTextArea
    jta  = new JTextArea(8,25);
    //se crean las barras de desplazamiento y se añade el jtextarea
    scrollPane = new JScrollPane(jta, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
    //se añade el objeto jtextarea al vector
    vjta.add(jta);            
    vfile.add(new file());        
    //se optiene la cantidad de tabs que existen
    int i = jtp.getComponentCount();        
    jta.setText("http://jc-mouse.blogspot.com/");
    //se añade los objetos al tabs        
    jtp.add(scrollPane, i);         
    jtp.setTitleAt(i, "nuevo documento");
}
    //obtiene los datos de un jtextarea del tabs actual
public String getdatos(JTabbedPane jtp){
    int i = jtp.getSelectedIndex();
    JTextArea t = (JTextArea) vjta.elementAt(i);
    return t.getText();
}
    //retorna un jtextarea del TABS actual
public  JTextArea getjTextArea(JTabbedPane jtp){
   int i = jtp.getSelectedIndex();
   JTextArea t = (JTextArea) vjta.elementAt(i);
   return t;
}
    //elimina un TABS junto a los demas objetos que le pertenecen
public void eliminar(JTabbedPane jtp){        
    int i = jtp.getSelectedIndex();
    jtp.remove(i);
    vjta.remove(i);
    vfile.remove(i);
}
    //retorna un boolean (true|false) si el contenido de una jtextarea ya 
    //fue guardado
public boolean fileisnew(JTabbedPane jtp){      
    file f = (file) vfile.elementAt(jtp.getSelectedIndex());
    return f.isnew;
}
    //cambia el estado isnew=false despues de que el archivo a sido
    //guardado por primera vez
public void guardado(JTabbedPane jtp, String t){
    file f = (file) vfile.elementAt(jtp.getSelectedIndex());  
    jtp.setTitleAt(jtp.getSelectedIndex(), t);  
    f.isnew=false;
 }  
}

4. por ultimo cree una nueva clase file.java, esta pequeña clase nos ayuda con la gestion de los archivos


package texto;
public class file {
boolean isnew=true;//condicion boolean
String ruta = "";//ruta del archivo
    public file(){}    
}

5. para terminar, tenemos que implementar las clases en la interfaz, esto no lo copies y pegues, sino observa la forma de inplementacion:


/* se crean los objetos */
textoclass tc = new textoclass();
JTabbedPane_op op = new JTabbedPane_op();    
String title = "Notepad+- by Mouse - file:["; 


/* esto en el initComponents */
public textoform() {
   initComponents();
   this.setTitle(title + "]");
   //crea un nuevo tabs junto a una hoja en blanco
   op.nuevo(JTP);
}

/* implementacion de las acciones del menu */
private void smOpenActionPerformed(java.awt.event.ActionEvent evt) {
   // Abre archivo de texto OPEN FILE
   String n = tc.Dialog("Open",op.getjTextArea(JTP));
   this.setTitle(title + tc.ruta + "]");
   op.guardado(JTP,n);
}     

private void smSaveAsActionPerformed(java.awt.event.ActionEvent evt) {
   // Guarda en un nuevo archivo   GUARDAR COMO...    
   String n = tc.Dialog("Save As",  op.getjTextArea(JTP)); 
   this.setTitle(title + tc.ruta+"]");       
   if (!n.equals("")){op.guardado(JTP,n);}
}

private void smSaveActionPerformed(java.awt.event.ActionEvent evt) {
  // Guarda modificaciones echas a un archivo 
  //si es nuevo guarda como
  if (op.fileisnew(JTP)) {
      String n = tc.Dialog("Save As", op.getjTextArea(JTP));
      this.setTitle(title + tc.ruta + "]");
      if (!n.equals("")){op.guardado(JTP,n);}
   }
   else
   { //sino actualiza el archivo abierto
      String n = tc.Dialog("Save", op.getjTextArea(JTP));   
      this.setTitle(title + tc.ruta+"]");
   }        
}

private void smNewActionPerformed(java.awt.event.ActionEvent evt) {
   //crea un nuevo tabs junto a una hoja en blanco
   op.nuevo(JTP);
}     

private void smClosetabActionPerformed(java.awt.event.ActionEvent evt) {
   //elimina un tabs
   op.eliminar(JTP);
}

Ya tenemos nuestro notepad+- en java
Como siempre los codigos estan extracomentados y tambien te dejo el codigo fuente, cualquier duda  o bugs que se encuentre, preguntar y avisar
Click para descargar

Mi software nunca tiene fallos. Simplemente desarrolla caracteristicas aleatorias

continue reading

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

Post recomendado