| Editor de texto |
| Paso 1: Operativa |
Creación de la clase EditorMarc
Como vamos a trabajar con la API Swing de Java para realizar este editor, la Clase EditorMarc va a heredar de la Clase javax.swing.JFrame.
- los componentes Swing están incluidos en el paquete javax.swing
- a partir de la versión 1.1 del JDK de Java se decidió que todas las extensiones del lenguaje Java que no exixtian en la primera versión, la 1.0, llevarían la letra x como sufijo a la palabra java en los paquetes. Por tando javax
El editor de texto lo crearemos en una ventana siguiendo los siguientes pasos:
nos situamos en la ventana Projects y con el botón derecho del ratón seleccionamos el paquete paqstreams. Entonces elegimos New | JFrameForm...

se abre el cuadro de diálogo New JFrame Form. En el campo de texto Class Name: introducimos el nombre de la Clase EditorMarc y finalmente hacemos clic sobre el botón 

Para que el Frame (marco, ventana) tenga dimensiones , vamos a modificar el código perteneciente al método main(...) tal y como hicimos en la aplicación del selector de colores. Tenemos que indicar:
- el tamaño del marco: 400 de ancho y 300 de alto
- el título del marco: Editor de Texto
- y finalmente lo mostramos en la pantalla de nuestro ordenador
Compara tu código con la solución propuesta
Creación de la clase EditorPanel
Todos los entornos de desarrollo RAD (Rapid application development) son de gran ayuda a la hora de crear nuestras aplicaciones gráficas. Pero todos sin excepción caen en el mismo error. Todo el código relacionado con la parte gráfica visual lo escriben en un mismo fichero.
- esto provoca que el software que estamos creando ahora no pueda ser reutilizable en ningún otro proyecto de forma ágil y flexible
- imaginemos que un cliente dentro de 6 meses nos pìde que le añadamos un editor de texto en su aplicación
- si seguimos la forma de trabajar de los entornos RAD, esto nos resultará casi imposible porque no podemos incrustar un JFrame dentro de otro JFrame
La solución a este inconveniente pasa por crear el editor en un panel, y que este panel sea un JavaBean que lo colocamos en nuestra paleta de componentes y puede ser reutilizado siempre que queramos.
Para crear la Clase EditorPanel
- nos situamos en la ventana Projects y con el botón derecho del ratón seleccionamos el paquete paqstreams
- elegimos new | Other...
- se abre el cuadro de diálogo New File y abrimos la carpetas Swing GUI Forms. Entonces elegimos JPanel Form y hacemos clic sobre el botón

- se abre el cuadro de diálogo New JPanel Form. En el campo de texto Class Name: introducimos el nombre de la Clase EditorPanel y finalmente hacemos clic sobre el botón

Asociar el JavaBean EditorPanel a la Aplicación EditorMarc
El JavaBean EditorPanel lo vamos a añadir a la paleta de componentes en la pestaña Beans según el Apéndice - Insertar un JavaBean creado por nosotros en la Paleta de componentes.
Ahora vamos a indicar que el marco EditorMarc tiene como Gestor de Organización BorderLayout. Para ello seleccionamos de la ventana Inspector [JFrame] | Set Layout | BorderLayout

Después pasamos el nuevo JavaBean de la paleta al interiror del marco EditorMarc.
A partir de ahora tenemos que tener muy claro que cualquier modificacón realizada sobre el editor se realizará en el JavaBean EditorPanel, y que la Clase EditorMarc actúa como una simple contenedora del editor. De esta forma, y siguiendo el ejemplo planteado con anterioridad, si un cliente dentro de 6 meses nos pide un editor de texto, será tan simple como arrastrarlo de nuestra paleta de componenetes a la Aplición de nuestro cliente.
Este es el código de la Clase EditorMarc
package paqstreams;
public class EditorMarc extends javax.swing.JFrame {
public EditorMarc() {
initComponents();
}
private void initComponents() {
editorPanel1 = new paqstreams.EditorPanel();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
getContentPane().add(editorPanel1, java.awt.BorderLayout.CENTER);
pack();
}
public static void main(String args[]) {
EditorMarc marco = new EditorMarc();
marco.setSize(400, 300);
marco.setTitle("Editor de Texto");
marco.setVisible(true);
}
private paqstreams.EditorPanel editorPanel1;
} |
Ampliación de la utilidad UtilEntradaSalida
Para que nuestro editor de texto pueda leer y guardar ficheros de texto, vamos a añadir los métodos cargarFichero(...) y guardarFichero(...) a la Clase UtilEntradaSalida
package paqstreams;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.FileReader;
import java.io.FileWriter;
import javax.swing.JTextArea;
public class UtilEntradaSalida {
public static void copiaFicheroBytes(String fich1, String fich2)
throws FileNotFoundException, IOException {
File fInput = new File(fich1);
File fOutput = new File(fich2);
FileInputStream fileInputStream = new FileInputStream(fInput);
FileOutputStream fileOutputStream = new FileOutputStream(fOutput);
int c;
while ((c = fileInputStream.read()) != -1)
fileOutputStream.write(c);
fileInputStream.close();
fileOutputStream.close();
}
public static void cargarFichero
(File
fileIn, JTextArea
textArea1) throws
IOException
{
if (fileIn == null) return;
FileReader fileReaderIn = new FileReader(fileIn);
int iTamaño = (int) fileIn.length();
char[] mCaracteres = new char[iTamaño];
fileReaderIn.read(mCaracteres, 0, iTamaño);
textArea1.setText(new String(mCaracteres));
fileReaderIn.close();
}
public static void guardarFichero(File fileOut, JTextArea textArea1) throws IOException {
if (fileOut == null) return;
FileWriter fileWriterOut = new FileWriter(fileOut);
String strTexto = textArea1.getText();
fileWriterOut.write(strTexto);
fileWriterOut.close();
}
} |
- public static void cargarFichero(File fileIn, JTextArea textArea1) throws IOException {
- este método carga el fichero seleccionado en un área de texto
- FileReader fileReaderIn = new FileReader(fileIn);
- creamos un stream de entrada basado en el fileIn para poder leer su contenido.
- como estamos leyendo texto utilizamos la clase FileReader en vez de de la Clase FileInputStream.
- int iTamaño = (int) fileIn.length();
- cogemos el tamaño del fichero
- char[] mCaracteres = new char[iTamaño];
- los caracteres leídos se guardan en una Matriz de Caracteres apuntada por la variable de referencia mCaracteres
- fileReaderIn.read(mCaracteres, 0, iTamaño);
- mCaracters: buffer de destino
- 0: Punto en el fichero desde donde se empiezan a leer los caracteres
- iTamaño: Máximo número de caracteres que queremos leer.
- textArea1.setText(new String(mCaracteres));
- muestra los caracteres del fichero en el Area de Texto
- fileReaderIn.close();
- cerramos el stream de entrada
- public static void guardarFichero(File fileOut, JTextArea textArea1) throws IOException {
- este método guarda el fichero seleccionado en un area de texto
- FileWriter fileWriterOut = new FileWriter(fileOut);
- ahora creamos un stream de salida basado en el fileOut para poder escribir dentro de él.
- como estamos leyendo texto utilizamos la Clase FileWriter en vez de FileOutputStream.
- String strTexto = textArea1.getText();
- depositamos el contenido del area de texto en un String
- fileWriterOut.write(strTexto);
- escribimos en stream de salida el contenido del String
- fileWriterOut.close();