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)
© Copyright 2024