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