7.3 ÁREAS DE TEXTO

 

Hola a todos, en este post vamos a ver las áreas de texto. Las áreas de texto a diferencia de los campo de texto que solo incluyen una línea de texto, las áreas de texto pueden incluir varias líneas.

Las áreas de texto utilizan la clase JTextArea que si vamos a la API de Java veremos que contiene una serie de métodos y varios constructores. Los métodos así más importantes son: getText()setLineWrap(boolean)geLineWrap()… entre otros que iremos viendo sobre la marcha.

Vamos a ver el uso de las áreas de texto mediante la práctica por lo que nos creamos una nueva clase cuyo código es el siguiente:

package swing;

 

import javax.swing.JFrame;

import javax.swing.JPanel;

 

public class EjemploArea {

 

       public static void main(String[] args) {

             MarcoArea mimarco = new MarcoArea();

           

             mimarco.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

 

       }

 

}

class MarcoArea extends JFrame {

     

       public MarcoArea() {

           

             setBounds(500, 300, 500, 350);

           

             LaminaArea milamina = new LaminaArea();

           

             add(milamina);

           

             setVisible(true);

       }

}

 

class LaminaArea extends JPanel {

     

       public LaminaArea() {

           

           

       }

}

Lo que vamos a hacer es crear un área de texto y un botón, el usuario escribirá lo que quiera en el área y cuando se pulse el botón aparecerá todo lo escrito en la consola.

Nos metemos dentro del constructor de la lámina  y nos creamos una instancia de la clase JTextArea a la que llamamos miarea con 8 filas y 20 columnas y la agregamos a la lámina

       public LaminaArea() {

           

         JTextArea miarea = new JTextArea(8, 20);

          

           add(miarea);

 

           

       }

Si probamos:



Se nos ha creado el área de texto, sin embargo, si escribimos y no hacemos un salto de línea:



El área de texto se va ensanchando y hasta que nosotros no pulsemos el botón Enter no escribe en la siguiente línea, es un comportamiento que no es adecuado, le tenemos que indicar que el área de texto detecte de forma automática el salto de línea, esto se lo indicamos con el método setLineWrap().

       public LaminaArea() {

            

         JTextArea miarea = new JTextArea(8, 20);

         

         miarea.setLineWrap(true);

          

           add(miarea);

 

           

       }

De esta forma cuando vamos escribiendo y llegamos al tope del área automáticamente se produce un salto de línea para seguir escribiendo.

Sin embargo, si seguimos escribiendo no podemos controlar lo que es el alto del área:



No podemos añadirle directamente unas barras de desplazamiento, para ello deberíamos crear una segunda lámina y en esta segunda lámina añadirle las barras de desplazamiento o barras de scroll.

Nos creamos una segunda lámina mediante la clase JScrollPane y en lugar de añadir a la lámina el área, es decir, miarea, añadimos la segunda lamina:

public LaminaArea() {

           

         JTextArea miarea = new JTextArea(8, 20);

         

         JScrollPane laminabarras = new JScrollPane(miarea);

         

         miarea.setLineWrap(true);

          

           add(laminabarras);

 

           

       }

Nos falta añadir el botón que lo vamos a instanciar en una nueva clase GestionArea que vamos a crear a continuación:

public LaminaArea() {

           

         JTextArea miarea = new JTextArea(8, 20);

         

         JScrollPane laminabarras = new JScrollPane(miarea);

         

         miarea.setLineWrap(true);

          

           add(laminabarras);

          

           JButton miboton = new JButton("Pulsar");

          

           miboton.addActionListener(new GestionArea());

    

       }

A continuación del constructor, nos creamos la clase interna GestionArea implementamos ActionListener e importamos el método:

private class GestionArea implements ActionListener{

 

            @Override

            public void actionPerformed(ActionEvent e) {

                  // TODO Auto-generated method stub

                 

            }

         

         

       }

No obstante, nos va a dar un error ya que hemos declarado JTextArea dentro del constructor de la lámina por lo que no va a estar visible en esta clase. Por lo que en lugar de definirla en  la lámina la definimos fuera:



Haciendo esto ya no nos daría error el System.out que vamos a programar dentro del método actionPerformed:

      public void actionPerformed(ActionEvent e) {

                 

                  System.out.println(miarea.getText());

                 

            }

Utilizamos el método getText para que nos capture el texto del área y que aparezca en la consola. Por último, nos falta añadir el botón dentro del constructor de la lámina:

add(miboton);

Probamos:



Comprobamos que conforme vamos escribiendo aparece la barra de desplazamiento que controla el alto del área de texto.

Vamos a ver otro ejemplo, nos creamos otra clase cuyo código es el siguiente:

package swing;

 

import javax.swing.JFrame;

 

public class PruebaArea {

 

       public static void main(String[] args) {

         MarcoPruebaArea mimarco = new MarcoPruebaArea();

           

             mimarco.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

            

             mimarco.setVisible(true);

 

       }

 

}

class MarcoPruebaArea extends JFrame {

     

       public MarcoPruebaArea() {

         

            setTitle("Prueba Área de texto");

           

             setBounds(500, 300, 500, 350);

 

       }

}

Lo que vamos a hacer es crear una gran área de texto que ocupe casi toda la ventana y en la parte inferior dos botones, uno de esos botones va insertar o quitar saltos de línea.



Lo primero que vamos a hacer es establecer el layout que va a tener el marco, que va a ser de tipo BorderLayout():

       public MarcoPruebaArea() {

         

            setTitle("Prueba Área de texto");

           

             setBounds(500, 300, 500, 350);

            

             setLayout(new BorderLayout());

 

       }

 Nos tenemos que crear dos láminas, una que este en la parte central del marco que será la que contenga el área de texto y una segunda lámina que contenga los botones y este en la parte sur del marco.

Nos creamos primero la lámina que va a contener los botones para ello después del constructor del marco declaramos o definimos un objeto de tipo lámina:

private JPanel lamina_botones;

Una vez creada nos metemos dentro del constructor del marco y la inicializamos:

lamina_botones = new JPanel();

A continuación nos creamos los botones que van a estar dentro de esta lamina, nos salimos de nuevo del constructor y después del objeto JPanel definimos los botones:

private JButton botonInsertar, botonSaltoLinea;

Inicializamos los botones y los ponemos a la escucha del evento dentro del constructor del marco:

    botonInsertar = new JButton("Insertar");

            

             botonInsertar.addActionListener(new ActionListener() {

 

                        @Override

                        public void actionPerformed(ActionEvent e) {

                             // TODO Auto-generated method stub

                            

                        }

                   

                   

             });

Lo que queremos que haga este botón es que inserte texto, al pulsarlo en el área de texto deberá aparecer un texto, esto lo hacemos dentro del método actionPerformed:

      public void actionPerformed(ActionEvent e) {

                            

                            

                             areatexto.append("En un lugar de la Mancha cuyo nombre no quiero acordarme");

                            

                        }

                   

                   

             });

Y declaramos fuera el objeto areatexto:

private JTextArea areatexto;

A continuación del método actionPerformed añadimos el botón a la lámina:

lamina_botones.add(botonInsertar);

Creamos el segundo botón que es el que se va a dedicar a agregar o eliminar saltos de línea, dentro del constructor del marco inicializamos este botón y ponerlo a la escucha.

             botonSaltoLinea = new JButton("Salto Línea");

            

             botonSaltoLinea.addActionListener(new ActionListener() {

 

                        @Override

                        public void actionPerformed(ActionEvent e) {

                             // TODO Auto-generated method stub

                            

                        }

                   

                   

             });

Dentro del método actionPerformed tenemos que detectar si el área de texto tiene saltos de línea o no los tiene, si los tiene que al pulsar el botón los quite, si no los tiene que al pulsar el botón ponga el salto de línea.

Creamos una variable de tipo boolean a la que vamos a llamar saltar que sea diferente al salto de línea.

public void actionPerformed(ActionEvent e) {

                            

                        boolean saltar =! areatexto.getLineWrap();

                            

                        }

A continuación de esta línea establecemos un salto de línea, por defecto, el área de texto no tiene saltos de línea, tenemos que restablecer que tenga, ya que en la variable boolean le indicamos que no tenga.

      public void actionPerformed(ActionEvent e) {

                            

                        boolean saltar =! areatexto.getLineWrap();

                            

                             areatexto.setLineWrap(saltar);

                            

                        }

Mediante un condicional evaluamos si tiene salto de línea o no:

public void actionPerformed(ActionEvent e) {

                            

                             boolean saltar =! areatexto.getLineWrap();

                            

                             areatexto.setLineWrap(saltar);

                            

                             if(saltar) {

                                  

                                   botonSaltoLinea.setText("Quitar Salto");

                             }else {

                                  

                                   botonSaltoLinea.setText("Salto Línea");

                             }

                            

                        }

                   

                   

             });

 

       }

Nos falta por añadir el área de texto a la lámina, declaramos la lámina:

private JScrollPane laminaconbarras;

Añadimos a la lámina correspondiente el botón que nos falta que es el de salto de línea:

             lamina_botones.add(botonSaltoLinea);

            

             add(lamina_botones, BorderLayout.SOUTH);

Iniciamos el área de texto y la añadimos a la lámina:

            

             areatexto = new JTextArea(8,20);

            

             laminaconbarras = new JScrollPane(areatexto);

Añadimos esta lámina con barras a la parte central:

add(laminaconbarras, BorderLayout.CENTER);

Con esto la aplicación ya estaría terminada, probamos:



Si pulsamos el botón Insertar nos tiene que aparecer la frase que pusimos en el código: “En un lugar de la Mancha…”.



Si pulsamos de nuevo el botón Insertar se nos añade el texto a continuación de la línea ya que no está habilitado el salto de línea, fijaros en el segundo botón:



Si pulsamos el botón Salto Línea nos añade un salto de línea, el botón cambia Quitar Salto:



Con cualquier duda lo podéis hacer a través de los comentarios del blog. Hasta pronto!

7.2 EVENTOS EN CUADROS DE TEXTO << >> 7.4CHECKBOX



No hay comentarios:

Publicar un comentario