>>
Lección 06

Componentes, contenedores y cursores.

En esta lección se estudian los componentes gráficos de Java, los contenedores de componentes, los diferentes métodos de despliegue que Java ofrece para acomodar los componentes en los contenedores, las ventanas y los menús.

El paquete java.awt está formado principalmente por las clases que se estudian en esta lección. Sería imposible incluir todos los detalles de las clases de java.awt en un curso. Para programar usando el AWT de Java es necesario consultar frecuentemente la documentación.


Componentes.


Un componente gráfico es una clase derivada (o sea, una extensión) de la clase Component. Aquí se presentan los componentes más usados, con los nombres en castellano que usaremos durante el curso, un ejemplo de cada uno y el código que generó el ejemplo. El alumno debe estudiar cada ejemplo para aprender la manera de crear e inicializar los componentes.

Button

botón

Canvas

pizarra

Checkbox

interruptor

CheckboxGroup

grupo

Choice

selector

Label

etiqueta

List

lista

Scrollbar

barra de
desplazamiento

TextArea

cuadro de texto

TextField

campo de texto

Como puede verse en los ejemplos de la tabla, para colocar un componente en un applet, primero hay que definir una variable del tipo deseado, después hay que crear una instancia, luego configurarla y finalmente, agregarla al applet (o como veremos más adelante a un contenedor).

Los cuatro pasos pueden mezclarse y a veces en una sola instrucción se pueden dar dos o tres pasos. Por ejemplo:

realiza en dos líneas los cuatro pasos. En la primera línea se declara la variable, se crea una instancia y se configura parcialmente asignándole su contenido. En la segunda línea sólo se agrega el campo de texto al contenedor. Lo mismo puede hacerse así:

He aquí una construcción muy frecuente:

En este caso no se declara la variable, sólo se crea la etiqueta y se agrega en la misma línea al contenedor. Esto puede hacerse cuando no deseamos en el futuro modificar o utilizar la etiqueta y por tanto no hace falta conservar una referencia a ella.

El alumno debe observar que grupo, es decir CheckboxGroup, no es un componente sino que se construye como un conjunto de interruptores. Sólo uno de los interruptores de un grupo puede tener valor true. Hay una diferencia en la presentación gráfica de un interruptor que pertenece a un grupo (círculos) respecto a los independientes (cuadros).

El siguiente ejemplo muestra varios componentes. El alumno debe estudiar el código que los ha generado observando los diferentes constructores y los métodos que se han usado para lograr las diferentes configuraciones.

Las listas muestran cierto número de filas (por defecto 4). Si la lista tiene más elementos que filas, aparece una barra de desplazamiento que permite ver todo el contenido de la lista. Lo mismo ocurre cuando el contenido de un cuadro de texto no cabe en el rectángulo asignado al cuadro.

Component es una clase abstracta que tiene muchos métodos, pero no es necesario conocerlos todos para usar sus clases derivadas. Lo importante es conocer sus métodos más usados y éstos se pueden ver en los ejemplos anteriores y en los que se presentarán en esta misma lección.

Es importante aclarar algo sobre el tamaño de los componentes. El paquete awt fue diseñado para que sus componentes sean utilizados en combinación con despliegues (Layouts). La idea es que los componentes adquieran el tamaño que conviene según la forma en que el programador desea acomodarlos. Por este motivo no siempre es conveniente ni fácil fijar el tamaño de un componente. En la sección sobre despliegues se aclarará este tema.

En los ejemplos de las siguientes secciones de esta lección, se verán más casos de construcciones y configuraciones de componentes. La manera de aprender a usar y configurar componentes es mirando muchos ejemplos y haciendo otros con ayuda de la documentación del paquete java.awt.


Contenedores.


Un contenedor es una clase derivada de la clase Container. Los contenedores son componentes que tienen la capacidad de albergar otros componentes. En particular Applet es un contenedor.

Los contenedores más usados son Panel y Window. De hecho los otros contenedores que se usan son extensiones de éstos. Applet es extensión de Panel. Frame y Dialog son extensiones de Window. Por tanto es importante estudiar antes Panel y Window.

Panel es el contenedor más usado. Se utiliza únicamente como apoyo para acomodar componentes. Su aplicación está muy relacionada con el uso de los Despliegues (Layouts) que se estudian en la siguiente sección. Normalmente para crear una interfaz de usuario se utilizan varios paneles cuya única misión es contener componentes u otros paneles que a su vez contienen componentes y paneles.

Un Panel no puede desplegarse solo, tiene que estar contenido en un applet o en una ventana (Window). Las ventanas son los contenedores de la clase Window y estos sí pueden desplegarse solos, aunque en la mayoría de las aplicaciones se utilizan para esto las clases Frame (Marco) y Dialog (Cuadro de diálogo), ambas subclases de Window.

El alumno ya ha visto ejemplos de paneles (los applets son paneles) y de marcos (que son ventanas) en los ejemplos HelloWindows y calcWin de la primera lección. Pero las aplicaciones verdaderamente interesantes de los contenedores dependen de los despliegues, por lo cual se estudiarán ambas cosas simultáneamente en los ejemplos de la siguiente lección.

La siguiente sección explica cómo se utilizan los cursores.


Cursores.


Aunque en el JDK 1.0 sólo se podía cambiar el cursor en las ventanas, a partir del JDK 1.1  es posible asignar cualquiera de los 13 cursores predeterminados a cada Component. A partir de Java 2 es posible crear cursores nuevos. En esta sección sólo explicaremos cómo utilizar los cursores predeterminados, lo cual es muy sencillo. Para muestra basta un botón... bueno, en este caso hemos hecho un applet con 13 botones. Los botones tienen los nombres de sus respectivos cursores. Basta que el lector pase cursor del ratón sobre el botón para que éste cambie al asignado a ese botón.

Aquí vería un applet si su navegador reconociese la etiqueta de APPLET.

Abajo aparece el código Java del applet de arriba. Como el lector podrá comprobar, para asignar un cursor a un componete bastan dos pasos:

1) Crear un cursor del tipo deseado con la instrucción Cursor cur= new Cursor(int cursorIndex);
2) Asignar el nuevo cursor al Component comp mediante la instrucción comp.setCursor(cur);

Aquí vería un applet si su navegador reconociese la etiqueta de APPLET.

El método getCursor() de Component devuelve el número del cursor asignado a la componente. Por defecto todos los componentes tienen asignado el DEFAULT_CURSOR.


Índice

Ejercicios de la Lección 06.


José Luis Abreu y Marta Oliveró