|
New 2 Java: Construir una Aplicación: 2.- Herencia, Paneles y Distribución |
Etiquetas e Imágenes
¿Qué clase deberíamos inicializar para los objetos image, text, y text area?
Para mostrar texto e imágenes, se usan las clases JLabel e ImageIcon. Una etiqueta es un cadena de texto corta, con o sin una imagen asociada. Las etiquetas normalmente se usan para mostrar títulos o para etiquetar otros objetos de la aplicación, como campos o áreas de texto. Podemos usar las clases JLabel y IconImage para mostrar el título y la bandera de buceo sobre el panel Welcome. La clase JTextArea se usa para áreas de texto.
Etiquetas e Imágenes
Un objeto JLabel es uno de los componentes más simples en la librería Swing. Usamos JLabel para mostrar texto o imágenes de las misma forma que las etiquetas del mundo real. La propia etiqueta contiene el texto y la imagen como la etiqueta de una lata de tomate.
Aquí está cómo mostrar una etiqueta de texto en una aplicacion:
- Inicializar un objeto de la clase JLabel con la palabra clave new.
- Asignarlo a un nombre de variable que sea corto pero descriptivo.
- Suministrar el texto deseado en el constructor de JLabel.
- Añadir la etiqueta al panel.

La ilustración de arriba muestra cómo se construyen juntas las distintas partes de una etiqueta. La etiqueta se construye con un String para mostrarlo añadiéndolo al constructor de JLabel, y la etiqueta es añadida a un JPanel. Esta etiqueta también tiene un fondo azul y un color de primer plano blanco.
En el código de abajo, se crea un JLabel simple:
JLabel text = new JLabel("This is text on a JLabel.");
Hasta ahora un objeto etiqueta con texto se creaba identificando el objeto como del tipo JLabel, asignandolo a la variable text, usando la palabra clave new, y proporcionando el texto que aparece en la etiqueta como un objeto String .
Sin embargo, para mostrarla realmente en la aplicación, la etiqueta debe añadirse al panel.
Recuerda que la clase Welcome es del tipo JPanel porque extiende la clase JPanel. Esta subclase Welcome hereda métodos de la clase Container, incluyendo uno llamado add. Para añadir la etiqueta la panel, llamamos al método por su nombre, add, y proporcionamos al método el objeto que queremos añadir, en este caso text:
add(text);
Esas dos líneas muestran el texto This is text on a JLabel.. Podemos cambiar la forma en la que aparece el texto usando diferentes constructores de JLabel, o referenciando el nombre de variable con un método, como para aplicar un tipo de fuente específico, o hacer que la etiqueta sea de un color específico.
Como hemos visto, los métodos de la clase Component son heredados y están disponibles para que los usemos con nuestras variables con el operador punto y llamando al método:
text.setForeground(Color.red);
La clase JLabel también tiene métodos que nos permiten manipular el objeto etiqueta. El método setHorizontalAlignment posiciona el objeto etiqueta:
text.setHorizontalAlignment(SwingConstants.RIGHT);
Aquí, como antes, usamos el nombre el objeto que queremos manipular, y luego la llamada al método usando el operador punto y el nombre del método. Pasamos en la clase SwingConstants, el operador punto, y la posición en la que queremos situar el objeto.
Además, podemos crear objetos JLabel con constructores que construyen algunos de estos detalles, como la posición, dentro de la creación de la etiqueta:
JLabel text = new JLabel( "This text will be centered.", JLabel.CENTER);
Una aplicación llamada Label.java demuestra los conceptos cubiertos hasta ahora, y el resultado es el siguiente:

|
Nota:
Como sólo hemos añadido un componente a esta aplicación el controlador de distribución por defecto (FlowLayout) es suficiente. |
La clase JLabel también ofrece un constructor que muestra un icono de imagen con el texto, que se describe en la siguiente sección.
Mostrar Imágenes con ImageIcon y JLabel
Para mostrar imágenes, creamos un objeto con la clase ImageIcon y le proporcionamos al constructor un fichero de imagen en un formato soportado por la clase ImageIcon, como .gif o .jpg. La imagen puede ser pasada al constructor como:
- un String con el nombre del fichero.
- un objeto URL especificando la localización de la imagen.
- un objeto Image
- un array de bytes con los datos de la imagen.
El objeto ImageIcon puede cargarse dentro de un JLabel, JButton, JMenuItem, u otro componente similar.
Todo esto se puede hacer en un sólo paso debido a un constructor manejable de JLabel:
JLabel(String text, Icon icon,
int horizontalAlignment)
Donde pone Icon icon, insertamos el constructor de ImageIcon que queremos usar. Por ejemplo:
// assigns the variable imageLabel
// as a JLabeltype
JLabel imageLabel =
// Initializes a JLabel object with
// a String object,
// Label with an Image.
new JLabel("Java Technology Dive Log",
// Initializes an ImageIcon object,
// specifically a diveflag.gif in a
// directory called images.
new ImageIcon("images/diveflag.gif"),
// Centers the JLabel object.
JLabel.CENTER);
El código de arriba crea un objeto JLabel que actúa como un contenedor para el obejto ImageIcon y el texto, como se ilustra abajo:
Ahora que la etiqueta y la imagen se han inicializado y asignado a jl, podemos llamar a otros métodos sobre ese objeto para cambiar alguna de las características por defecto, como la fuente utilizada en el texto.
La clase JComponent tiene un método setFont para este propósito. El método requiere un objeto Font como argumento, lo que significa que debemos inicializar la clase Font con la palabra clave new. La inicialización de la clase Font requiere tres argumentos:
- Una representación String de la fuente, como "Courier"
- El estilo de la fuente, como Font.BOLD.
- Un int para el tamaño en puntos de la fuente, como 14.
Para cambiar la fuente por defecto mostrada en JLabel, usamos:
jl.setFont(new Font("Times-Roman", Font.BOLD, 17));
Este código selecciona la fuente del objeto jl a Times Roman, en bold, a 17 puntos.
| Sigue estos pasos... |
|---|
|
Áreas de Texto con JTextArea
JLabel es usada para mostrar pequeñas cadenas de texto. Para mostrar grandes bloques de texto, inicializamos un objeto de la clase JTextArea. Ya hemos configurado una variable para un área de texto llamada ta al principio de la clase. Luego crearemos el área de texto asignándole la variable que hemos creado.
En la clase Welcome, usamos el siguiente constructor de JTextArea:
JTextArea(String text)
Nuestro código se paracerá a algo como esto:
ta = new JTextArea("This application uses a
typical Graphical User Interface (GUI),
featuring AWT layout managers and Project
Swing components . . .");
Pero hay un problema con este código. Si compilamos este constructor según está escrito, obtendremos un error.
| ¿Por qué no se compilará el código del ejemplo? |
|---|
















































