EJ_LENGUAJE_JAVA_32(PROGRAMACI?N MDI)

PROGRAMACIÓN
JAVA
PROGRAMACIÓN 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
En el centro de la ventana (se recomienda un Layout del tipo BorderLayout) se colocará un
panel del tipo JDesktopPane que será el encargado de contener las ventanas internas. Puede
llamar a este panel panelInterno.
Aspecto de la ventana principal:
panelInterno
(JDesktopPane)
Ventana Interna
Debe añadir a su proyecto una clase JInternalFrame para diseñar 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 líneas. Llame al objeto JTextPane
con el nombre txtTexto.
txtTexto
(JTextPane)
Estas ventanas internas contendrán el texto del fichero que se abra. Para facilitar la tarea de
abrir un fichero y colocar su texto en la ventana interna debe añadir el siguiente método 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 método 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 código de este método, en la
parte final del enunciado se da una explicación de su funcionamiento.
Opciones principales del programa
Se comenta a continuación la forma en que deben funcionar las distintas opciones del
programa:
Opción Archivo – Abrir
Esta opción servirá para abrir un fichero .txt y mostrar su contenido en una ventana interna.
Para ello, tendrá que mostrar un JFileChooser para abrir un fichero.
Si el usuario selecciona un fichero, entonces tendrá que crear una ventana interna llamada por
ejemplo vi, y mostrarla en el panel Interno.
Finalmente, usando el método ponerTexto de la ventana interna vi deberá mostrar el contenido
del fichero seleccionado en el JFileChooser.
vi.ponerTexto(caminoficheroseleccionado)
Al abrir un fichero de texto en una ventana, deberá aparecer el camino del fichero en la barra
de título de la ventana interna.
Opción Archivo – Cerrar
La opción Cerrar cerrará la ventana interna que esté activa (si es que hay alguna)
Opción Archivo – Cerrar Todas
Esta opción cerrará todas las ventanas internas abiertas en el panel interno.
Opción Archivo – Salir
Permitirá salir del programa.
Opción Ventana – Cascada
Esta opción colocará todas las ventanas internas que haya abiertas en cascada. Esto es, una
encima de otra, mostrando el título de cada una.
Opción Ventana – Mosaico Horizontal
Esta opción hará visible todas las ventanas mostrándolas en horizontal, ocupando todo el panel
interno.
Para ello, tendrás que obtener el tamaño vertical del panel interno, y dividirlo por el número de
ventanas abiertas en él. Esa cantidad será la altura de cada ventana.
El ancho de cada ventana será el ancho del panel interno.
Una vez calculado el ancho y alto de cada ventana debes colocar cada ventana una debajo de
otra.
Opción Ventana – Mosaico Vertical
Esta opción hará visible todas las ventanas mostrándolas en vertical, ocupando todo el panel
interno.
Para ello, tendrás que obtener el tamaño horizontal del panel interno, y dividirlo por el número
de ventanas internas abiertas en él. Esa cantidad será el ancho de cada ventana.
Al alto de cada ventana será el alto del panel interno.
Una vez calculado el ancho y alto de cada ventana debes colocar cada ventana una al lado de
otra.
EXPLICACIÓN MÉTODO ponerTexto
Para realizar este ejercicio es necesario añadir a la clase de la ventana interna el siguiente
método. No es necesario entender el código de este procedimiento para hacer el ejercicio, pero
en cualquier caso, aquí hay una explicación de este:
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 método 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 través de “canales”. Los
canales son objetos que se “enganchan” al fichero uno detrás 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 información 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 través del método readLine del objeto BufferedReader se pueden extraer
una a una las líneas 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 creación de un objeto File a partir del camino del fichero se hace con la siguiente
instrucción:
File fi = new File(caminofichero);
La creación de un canal FileReader y la conexión con el fichero anterior se hace a través de la
siguiente instrucción:
FileReader lectura = new FileReader(fi);
La creación de un canal BufferedReader y la conexión con el canal FileReader anterior se hace
a través de la siguiente instrucción:
BufferedReader entrada = new BufferedReader(lectura);
Una vez hecho esto, tenemos un objeto llamado entrada del tipo BufferedReader que posee un
método llamado readLine que permite leer una línea de texto del fichero. A través de este
método vamos leyendo líneas de texto del fichero.
Hay que tener en cuenta que si al usar readLine obtenemos el valor null, es que ya no hay más
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 código anterior crea una variable texto que contiene el texto completo del fichero. Este
código extrae una a una las líneas de texto del fichero y las va concatenando en la variable
texto.
Como hemos terminado con la manipulación del fichero, es bueno cerrar los canales de
comunicación con el fichero (el canal FileReader y el canal BufferedReader creados):
entrada.close();
lectura.close();
Y finalmente metemos el texto extraído en el panel de texto de la ventana, el cual se llama
txtTexto:
txtTexto.setText(texto);
Todo esto debe estar dentro de un try ... catch ya que es un código susceptible de tener errores
de ejecución (es decir, de lanzar excepciones)