Noticias

* Completa este formulario para conocer los temas de tu interes, te tomará unos segundos.
* Nuevos temas en CAKEPHP
* Ahora puedes bajar los proyectos finalizados!
* Sigue a la página para seguir creciendo!!

viernes, 18 de enero de 2013

Java: Swing: JTextArea y JScrollPane

No hay comentarios :
Introducción

Los JTextArea se utilizan cuando se le pide al Usuario que escriba por ejemplo un comentario, una sugerencia o cualquier otra cosa que lleve varias líneas, es algo muy parecido al JTextField, solo que para un texto más amplio.

Desarrollo

Lo primero que se hace es importar la librería:

import javax.swing.JTextArea;

Para crear nuestro objeto haríamos el siguiente método:

    // Crea un JTextArea para escribir un texto amplio
    private JTextArea jtaEscribir() {
        // Se inicializa la variable
        JTextArea area = new JTextArea();
        // Se define el salto de linea automático
        // (cuando llega al final del JTextArea hace un salto de línea)
        area.setLineWrap(true);
        // Se asigna posicion y tamaño al JTextArea
        area.setBounds(30, 30, 300, 200);
        // Le podemos asignar un color de fondo
        area.setBackground(new Color(0, 0, 0));
        // Por ende cambiamos el color de letra
        area.setForeground(new Color(255, 255, 255));
        return area;
    }

Las propiedades para definir el fondo y el color de letra solo las coloqué para que vean que si se pueden usar, mientras que el método .setLineWrap() es para cuando llegamos al final del tamaño de nuestro JTextArea salte automáticamente a la siguiente línea y eso evita que el usuario tenga que precionar enter cada vez que llegue al final o que siga escribiendo en una unica línea todo.

Ahora bien con esto existe un problema casi nunca funciona colocar los scrolls que trae por defecto el JTextArea por tanto si el usuario llega al final (de abajo en el eje Y) del JTextArea podrá seguir escribiendo pero no podrá ver que es lo que escribe, pero eso lo solucionamos con nuestro JScrollPane!!!

El JScrollPane es el que nos viene a solucionar ese pequeño defecto y a dar un toque más bonito a nuestro JTextArea, para las barra de desplazamiento importamos:

import javax.swing.JScrollPane;

Pues bien nuestro JScrollPane es un panel, ¿qué es un panel?, pues un panel es un objeto que almacena otros objetos dentro de el, por ejemplo imaginemos una cubeta en la cual colocamos algunos elementos dentro en cierto orden, cuando movemos la cubeta no hay que mover todos esos elementos dentro de ella porque ya están dentro y se mueven con ella , solo que nuestro JScrollPanel no solo contiene objetos sino que también da barras de desplazamiento.

Para crearlo haremos el siguiente método:

 // Se crea una barra de desplazamiento
 private JScrollPane jsbBarra() {
     // Se inicializa el objeto y se le agrega un JTextArea
     JScrollPane scroll = new JScrollPane(jtaEscribir());
     // Se le asigna una posicion y un tamaño
     scroll.setBounds(30, 30, 300, 200);
     return scroll;
 }

Nuestro ScrollPane va a recibir a nuestro método donde creamos nuestro JTextArea y en el JFrame no agregamos el JTextArea sino que agregamos el JScrollPane. Y a nuestro método del JTextArea le quitamos lo posición y el tamaño ya que no los necesitamos.

Al final nuestra clase quedaría así, es solo una ventana con un campo donde escribir:

import java.awt.Color;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

@SuppressWarnings("serial")
public class JTextAreaYJScrollPane extends JFrame {

    public JTextAreaYJScrollPane() {
        // add(jtaEscribir());
        add(jsbBarra());
        inicializador();
    }

    // Inicializador de la Ventana
    private void inicializador() {
        setSize(400, 300);
        setLayout(null);
        setTitle("Mi ventana");
        setLocationRelativeTo(null);
        setVisible(true);
        setResizable(false);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
    }

    // Crea un JTextArea para escribir un texto amplio
    private JTextArea jtaEscribir() {
        // Se inicializa la variable
        JTextArea area = new JTextArea();
        // Se define el salto de linea automático
        // (cuando llega al final del JTextArea hace un salto de línea)
        area.setLineWrap(true);
        // Se asigna posicion y tamaño al JTextArea
        // area.setBounds(30, 30, 300, 200);
        // Le podemos asignar un color de fondo
        area.setBackground(new Color(0, 0, 0));
        // Por ende cambiamos el color de letra
        area.setForeground(new Color(255, 255, 255));
        return area;
    }

    // Se crea una barra de desplazamiento
    private JScrollPane jsbBarra() {
           // Se inicializa el objeto y se le agrega un JTextArea
           JScrollPane scroll = new JScrollPane(jtaEscribir());
           // Se le asigna una posicion y un tamaño
           scroll.setBounds(30, 30, 300, 200);
           return scroll;
    }

    // El MAIN
    public static void main(String[] args) {
        new JTextAreaYJScrollPane();
    }
}

Si quieren ver las diferencias con y sin el ScrollPane pueden comentar el add() del método del Scroll y descomentar el add() del método del JTextArea (y de este método descomentar el tamaño y posición) y así verán que es más estético con un JScrollPane (por lo menos ese es mi parecer).

La Documentación de Java al respecto:
JTextArea: http://docs.oracle.com/javase/8/docs/api/javax/swing/JTextArea.html

Conclusiones

El textArea y el scrollPane son elementos que pueden servir de mucho en nuestras aplicaciones y gracias al scrollPane, se logra tener un mejor acabado

No hay comentarios :

Publicar un comentario