En esta ocasión nos toco ver el tema de eventos, excepciones y errores así que para el taller de la materia identificamos los mismos en nuestro código para corregir o tratar errores y excepciones y mostrar o implementar eventos en o de nuestro código.
En primer lugar empezare con los ...
Eventos
Esta es la clase TextManager del proyecto que utilizo como escucha por cuestiones de comodidad ademas de ahorro de memoria. Esta clase tiene un método al cual se le notifica cuando ocurre un evento y sabe que hacer con este, todo esto hablando de la interfaz gráfica. hasta ahora solo tiene cuatro eventos pero cuando lleguemos al tema de interfaces gráficas probablemente tenga que agregar mas.
public class TextManager implements ActionListener {
public void actionPerformed(ActionEvent e){
String cmd = e.getActionCommand();
if(cmd == "abrir")
this.abrir();
if(cmd == "nuevo")
System.out.println("Se ha picado nuevo");
if(cmd == "guardar")
this.guardar();
if(cmd == "guardarComo" )
this.guardarComo();
}
};
public class GUI extends javax.swing.JFrame{
public void barraPrincipal(TextManager listener){
JMenuItem abrir = new JMenuItem(jMenu[2]);
JMenuItem nuevo = new JMenuItem(jMenu[3]);
JMenuItem guardar = new JMenuItem(jMenu[4]);
JMenuItem guardarComo = new JMenuItem(jMenu[5]);
abrir.addActionListener(listener);
abrir.setActionCommand("abrir");
nuevo.addActionListener(listener);
nuevo.setActionCommand("nuevo");
guardar.addActionListener(listener);
guardar.setActionCommand("guardar");
guardarComo.addActionListener(listener);
guardarComo.setActionCommand("guardarComo");
}
};
Utilizo un solo escucha por que en mi caso el escucha utiliza el patrón Singleton puesto que si se crearan varios dividiría el programa en partes y seria menos eficiente.
Errores
Solo he tomado en cuenta dos errores y son la falla de alguna de estas clases del programa puesto que son las mas importantes y solo pueden ser implementadas una ves. así que en caso de que fallen falla todo el programa y no queda mas opción que terminarlo.
La clase TextManager que se encarga de administrar los archivos que se abren para editarlo, los que se crean y los que se guardan, ademas que sirve de escucha para los eventos generados por la interfaz gráfica.
try {
textActions = TextManager.obtenerInstancia(hojas);
}catch(Error e){
e.printStackTrace();
System.out.println("TextActions No se ha iniciado correctamente");
}
La clase GUI que contiene las hojas que sirven de campo de trabajo y cualquier opción controlable por el usuario, sin esta no tendría mucho sentido que siguiera ejecutándose el programa.
try {
GUI ventana = GUI.obtenerInstancia("MxText",hojas);
ventana.barraPrincipal(textActions);
}catch(Error e){
e.printStackTrace();
System.out.println("GUI No se ha iniciado correctamente");
}
Excepciones
Esta excepción se debería tirar al no poder abrir un archivo esta excepción notifica al TextManager que no fue posible abrir el documento para informarle al usuario.
public class Reader{
// Atributos
public String nameFile;
private File ar=null;
private FileReader fr=null;
private BufferedReader into =null;
private StringBuffer buffer =null;
//Constructor
public boolean abrirDocumento(){
try{
ar =fl;
fr = new FileReader(ar);
into = new BufferedReader(fr);
return true;
}catch(Exception e){
e.printStackTrace();
return false;
}
}
};
Esta excepción al igual que la anterior notifica ala clase TextManager por medio de un valor booleano que no se puedo guardar el archivo.
public class Writer{
// atributos
private String nameFile;
private File ar=null;
private FileWriter fw=null;
private StringBuffer buffer =null;
/**
* Constructor que ocupa la direccion del archivo con la informacion dada.
*/
public boolean guardarDocumento (){
try{
if(fl == null){
ar=new File(name);
}else{
ar =fl; }
fw = new FileWriter(ar);
return true;
}catch(Exception e){
e.printStackTrace();
return false;
}
}
];
En caso de que haya una excepción al devolver el documento entonces borra lo que haya agregado al buffer y devuelve un falso para que la clase TextManager sepa que hacer.
public class Reader{
public boolean devolverDocumento(){
int c;
try{
while( (c = into.read()) != -1){
buffer.append((char)c);
}
return true;
}catch(Exception e){
e.printStackTrace();
buffer.delete(0,buffer.capacity());
return false;
}
}
};
En caso de que al guardar haya un error en la clase Writer devuelve lanza la excepción y devuelve un valor falso.
public class Writer{
public boolean escribirDocumento(){
try{
fw.write(buffer.toString());
// es como solia decir la abuela argaslakslasdlaskjlaklskaslsj X_X
// abuela? abuela!!? :(
return true;
}catch(Exception e){
e.printStackTrace();
return false;
}
}
};
Esas son algunos de mis eventos, excepciones y errores de mi proyecto saludos.
Qué onda Max, vi tall en el título y me saque de onda ya capte que es de taller jejeje, pues muy buenos tus implementaciones de eventos, excepciones y errores, igual no estaría de más que agregaras algún tipo de evento que "escuche" si vas a cerrar el archivo sin haberlo guardado y le avise al usuario para que no pierda su información.
ResponderBorrarSaludos =D
Buena idea lo pondré en algún método cuando agregue el botón para cerrar el archivo :)
ResponderBorrarUn bueno evento seria "subrayar" el texto para cuando se quiere copiar, pegar, etc, etc.
ResponderBorrarEi que onda max, también podrías implementar una excepción de que si el usuario por accidente no abre un archivo de texto por ejemplo en lugar abre un archivo de video o también si intenta abrir un archivo que ya este en abierto y también cuando el usuario intenta guardar el documento con un nombre ya existente
ResponderBorrartambién te puede servir un evento parecido al que dice este Adan pero que este siempre este siempre este altanto y haciendo un respaldo de lo que llevas como el editor emacs que cree un archivo algo.java~ así se la computadora se apaga repentinamente se conserven los cambios sin que el usuario lo aya alcanzado a grabar
Saludos (:
quise decir "seleccionar" mira
ResponderBorrar""""El JTextArea tiene una cosa que se llama *Caret*. El Caret este no es más que un rectángulo de otro color para texto seleccionado. Podemos obtener este rectángulo con el método getCaret() del JTextArea"""""
Adán, Alex y Cecy +1. Max 5.
ResponderBorrar