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