Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
JAVA
PROGRAMACIN MDI
Bloc de Notas MDI
Planteamiento Inicial
Se pretende realizar un programa capaz de abrir ficheros de texto (.txt). Este programa ser
MDI, es decir, ser capaz de abrir varios ficheros, mostrando sus contenidos en distintas
ventanas.
Ventana Principal
La ventana principal del programa constar de un men con las siguientes opciones:
Archivo
Abrir
Cerrar
Cerrar Todos
Salir
Ventana
Cascada
Mosaico Horizontal
Mosaico Vertical
panelInterno
(JDesktopPane)
Ventana Interna
Debe aadir a su proyecto una clase JInternalFrame para disear las ventanas internas.
Una ventana interna constar nicamente de un objeto JTextPane que ocupar toda la ventana.
Los objetos JTextPane son similares a los cuadros de texto (JTextField) con la diferencia de
que pueden contener grandes cantidades de texto en varias lneas. Llame al objeto JTextPane
con el nombre txtTexto.
txtTexto
(JTextPane)
Estas ventanas internas contendrn el texto del fichero que se abra. Para facilitar la tarea de
abrir un fichero y colocar su texto en la ventana interna debe aadir el siguiente mtodo a la
clase ventana interna:
public void ponerTexto(String caminofichero) {
try {
File fi = new File(caminofichero);
FileReader lectura = new FileReader(fi);
BufferedReader entrada = new BufferedReader(lectura);
String linea;
String texto="";
linea = entrada.readLine();
while(linea!=null) {
texto = texto+linea+"\n";
linea = entrada.readLine();
}
entrada.close();
lectura.close();
txtTexto.setText(texto);
} catch(Exception e) {
JOptionPane.showMessageDialog(null,"Error al leer fichero.");
}
}
Este mtodo recibe el camino de un fichero, y coloca dentro del JTextPane (el panel de texto) el
texto contenido en el fichero. Aunque no es necesario entender el cdigo de este mtodo, en la
parte final del enunciado se da una explicacin de su funcionamiento.
Este mtodo recibe un camino de fichero de texto y muestra dentro de un JTextPane el texto
que contiene dicho fichero.
La forma de acceder a un fichero para extraer su contenido es a travs de canales. Los
canales son objetos que se enganchan al fichero uno detrs de otro. Cada canal ofrece una
serie de posibilidades al programador.
Para los ficheros de texto, la forma de acceder a ellos es la siguiente:
-
Camino Fichero
(String)
Se crea un objeto File a partir del camino del fichero (El camino del fichero es un
String)
Se engancha al objeto File un objeto del tipo FileReader. (Los objetos FileReader son
canales de lectura, que permiten extraer informacin del fichero)
Se engancha al canal FileReader un objeto BufferedReader. (Los objetos
BufferedReader dan facilidad al programador para extraer el texto del fichero)
Finalmente, a travs del mtodo readLine del objeto BufferedReader se pueden extraer
una a una las lneas de texto del fichero.
Una vez finalizado el trabajo con el fichero se cierra el canal FileReader y el canal
BufferedReader.
Objeto Fichero
(File)
Canal de Acceso al
Fichero
(FileReader)
Canal de Acceso al
Fichero
(BufferedReader)
La creacin de un objeto File a partir del camino del fichero se hace con la siguiente
instruccin:
File fi = new File(caminofichero);
Una vez hecho esto, tenemos un objeto llamado entrada del tipo BufferedReader que posee un
mtodo llamado readLine que permite leer una lnea de texto del fichero. A travs de este
mtodo vamos leyendo lneas de texto del fichero.
Hay que tener en cuenta que si al usar readLine obtenemos el valor null, es que ya no hay ms
texto en el fichero.
Todo esto se aprovecha para crear una cadena larga con el contenido del fichero:
String linea;
String texto="";
linea = entrada.readLine();
while(linea!=null) {
texto = texto+linea+"\n";
linea = entrada.readLine();
}
El cdigo anterior crea una variable texto que contiene el texto completo del fichero. Este
cdigo extrae una a una las lneas de texto del fichero y las va concatenando en la variable
texto.
Como hemos terminado con la manipulacin del fichero, es bueno cerrar los canales de
comunicacin con el fichero (el canal FileReader y el canal BufferedReader creados):
entrada.close();
lectura.close();
Todo esto debe estar dentro de un try ... catch ya que es un cdigo susceptible de tener errores
de ejecucin (es decir, de lanzar excepciones)