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

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

5 comentarios:

Ivanhoe dijo...

Muchas gracias por el tiempo que dedica a los tutoriales. Este es muy útil.

Anónimo dijo...

Gracias JcMouse por este y todos los proyectos tan buenos que publicas... me han ayudado mucho...
ademas la explicacion es muy buena y facil de enterder..

Johp3

martin dijo...

millon gracias eres lo maximo por gente como tu esuqe nosostros nos perfeccionamos porqe loq ue nos enseñan en clase es poco con lo que e aprendido contigo gracias

Anónimo dijo...

La verdad me dejas sorprendiido
aunq ya tiiene muxo tiempo tu publicacion a penas lo estoi viendo
y la verdad me sorprendes
sige asiii eres un master

buena suerte

atttE: desde mexico cancun quientana roo ...jose alcudia

Anónimo dijo...

Hola Jc mouse, siempre sigo tus ejemplos... te felicito por tu dedicación y sobre todo como compartes los conocimientos con los que estamos iniciando...

Sobre este programa quería consultarte algo, mira: A mi se me vino la misma pregunta, como puedo guardar la configuración de mi aplicación, pues y opté como tu leer un archivo.txt, pero tengo un problema:

Cuando corro la aplicación trabaja perfectamente, pero cuando se construye el .jar no funciona... porque se da esto?? bueno, tienes otra idea para guardar la configuración y no tener este inconveniente, estaba leyendo y dice que no es factible sobreescribir el archivo txt dentro del jar, lo que hay que hacer es extraer, modificar y zipiar nuevamente...

Quedo a la espera de tus comentario y muchas gracias por tus valioso conocimiento.

Saludos
Leandro

Post recomendado