Se necesita:
- Java
 - Netbeans 6.0
 - 15 minutos de su tiempo
 
El proyecto comprende:
Comencemos:
OJO: Fijese en los nombres de los objetos y coloquelos como en la imagen
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;
    }
}
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













3 comentarios:
Se ve, bueno...
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
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
Publicar un comentario