El proyecto que estoy llevando a cabo consiste actualmente en cinco clases: Interfaz, ModeloAbrir, ControladorAbrir, ModeloGuardar, ControladorGuardar; algunas de las cuales cuentan con eventos (especialmente los controladores) y con excepciones.
Eventos
ControladorAbrir
Esto es lo que pasa cuando presiono el botón Abrir del menú Archivo
public void actionPerformed(ActionEvent event) { // Se crea el FileChooser. fc = new JFileChooser(); int respuesta; respuesta = fc.showOpenDialog(areaDeTrabajo); // Confirma que se haya presionado el botón Abrir y así poder aplicar // la lógica de la opción Abrir if (JFileChooser.APPROVE_OPTION == respuesta) { // Se obtiene el fichero File archivo = fc.getSelectedFile(); try { // Se abre el archivo. Este método tiene que ser definido por las // clases hijas logicaAbrir(archivo); } catch (Exception e) { // Mensaje de error si se produce. JOptionPane.showMessageDialog( areaDeTrabajo, e, "Error en el archivo " + archivo, JOptionPane.ERROR_MESSAGE); } } }
ControladorGuardar
public void actionPerformed(ActionEvent event) { selectorArchivos = new JFileChooser(); int respuesta; respuesta = selectorArchivos.showSaveDialog(areaDeTrabajo); // Confirma que se haya presionado el botón Guardar y así poder aplicar // la lógica de la opción Guardar if (JFileChooser.APPROVE_OPTION == respuesta) { // Se obtiene el fichero File archivo = selectorArchivos.getSelectedFile(); try { // Se guarda. Las clases hijas deben redefinir este método. logicaGuardar(archivo); } catch (Exception e) { // Mensaje de error si se produce. JOptionPane.showMessageDialog(null,"Error de archivo"+e.toString()); } } }
Copiar, cortar y pegar del menú Edición
Para estas opciones no fue necesario implementar la interfaz ActionListener y su respectivo método abstracto public void actionPerformed(ActionListener arg0) debido a que ya puedo encontrar las acciones en la biblioteca de Java, más en específico de DefaultEditorKit el cual se puede encontrar en la librería javax.swing.text. Para hacer lo anterior (y como se puede apreciar en el código) primero debemos obtener el mapa de acciones del área de Texto para poder agregar las acciones (copiar, cortar y pegar) a los MenuItems y llevarlas a cabo dentro de dicha área. Lo que habría que checar es si es posible realizar dichas acciones en otros componentes de Texto (JEditorPane, JTextPane).
Action accionCopiar = areaDeTexto.getActionMap().get(DefaultEditorKit.copyAction); accionCopiar.putValue(Action.NAME,"Copiar "); accionCopiar.putValue(Action.ACCELERATOR_KEY,KeyStroke.getAWTKeyStroke('C',Event.CTRL_MASK)); copiar = new JMenuItem(accionCopiar); Action accionPegar = areaDeTexto.getActionMap().get(DefaultEditorKit.pasteAction); accionPegar.putValue(Action.NAME,"Pegar "); accionPegar.putValue(Action.ACCELERATOR_KEY,KeyStroke.getAWTKeyStroke('P',Event.CTRL_MASK)); pegar = new JMenuItem(accionPegar); Action accionCortar = areaDeTexto.getActionMap().get(DefaultEditorKit.cutAction); accionCortar.putValue(Action.NAME,"Cortar "); accionCortar.putValue(Action.ACCELERATOR_KEY,KeyStroke.getAWTKeyStroke('O',Event.CTRL_MASK)); cortar = new JMenuItem(accionCortar);
Excepciones y errores
ModeloAbrir
Se presentan dos excepciones en esta parte del código.
1.- Se arroja la excepción FileNotFoundException cuando no se puede encontrar el archivo.
2.- En el try-catch, el catch y IOException se emplean cuando existe un error de lectura.
protected void logicaAbrir(File archivo) throws FileNotFoundException { // Se crea el objeto archivoEntrada para leer el archivo. // bufferLinea irá modificando su longitud al ir leyendo las lineas del // archivo. Al final todos esos caracteres se colocarán en el area de Texto BufferedReader archivoEntrada = new BufferedReader(new FileReader(archivo)); StringBuffer bufferLinea = new StringBuffer(); try { String linea = archivoEntrada.readLine(); while (linea != null) { // Se va añadiendo las líneas que se leen a la variable bufferLinea // modificando cada vez la longitud de caracteres de esta variable. // Además se agrega un salto de línea con la instrucción // System.getProperty("line.separator") la cual da mayor portabilidad bufferLinea.append(linea); bufferLinea.append(System.getProperty("line.separator")); // Siguiente linea. linea = archivoEntrada.readLine(); } } catch (IOException e) { JOptionPane.showMessageDialog( areaDeTrabajo, e, "Error al leer el archivo", JOptionPane.ERROR_MESSAGE); } // Se pone el texto leido en el JTextArea. areaDeTrabajo.setText(bufferLinea.toString()); } }
ControladorAbrir
Excepción para cuando existan errores al abrir el archivo
// Se crea el FileChooser. fc = new JFileChooser(); int respuesta; respuesta = fc.showOpenDialog(areaDeTrabajo); // Confirma que se haya presionado el botón Abrir y así poder aplicar // la lógica de la opción Abrir if (JFileChooser.APPROVE_OPTION == respuesta) { // Se obtiene el fichero File archivo = fc.getSelectedFile(); try { // Se abre el archivo. Este método tiene que ser definido por las // clases hijas logicaAbrir(archivo); } catch (Exception e) { // Mensaje de error si se produce. JOptionPane.showMessageDialog( areaDeTrabajo, e, "Error en el archivo " + archivo, JOptionPane.ERROR_MESSAGE); } }
ModeloGuardar
Excepción utilizada para saber avisar que se ha producido errores al momento de guardar.
selectorArchivos = new JFileChooser(); int respuesta; respuesta = selectorArchivos.showSaveDialog(areaDeTrabajo); // Confirma que se haya presionado el botón Guardar y así poder aplicar // la lógica de la opción Guardar if (JFileChooser.APPROVE_OPTION == respuesta) { // Se obtiene el fichero File archivo = selectorArchivos.getSelectedFile(); try { // Se guarda. Las clases hijas deben redefinir este método. logicaGuardar(archivo); } catch (Exception e) { // Mensaje de error si se produce. JOptionPane.showMessageDialog(null,"Error de archivo"+e.toString()); } }
Fuentes
Chuidiang
Ok.
ResponderEliminarCalificación: 5/5