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

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

3 comentarios:

Edmond dijo...

Se ve, bueno...

Anónimo dijo...

cordial saludo

trato descargarlo pero me genera un error como ya no se encontrara el link de toda manera dejo mi correo geovanny0401@gmail.com

hautiro dijo...

hola esta muy bueno tu codigo. Estoy haciendo un comprobador sintactico para paginas html me servira lo de las pestañas ^_^, como puedo hacer para que me aprescan los numeros de linea a la para de las lineas pero no dentro del documento, no se si me entiendes como en el netbean por ejemplo

Post recomendado