Applets

prev.gif (997 bytes)home.gif (1054 bytes)next.gif (998 bytes)

Introducción

El contexto gráfico

Gestores de diseño

Respuesta a las acciones del usuario sobre los controles

Subprocesos (threads)

Estudio de ejemplos completos

La tecnología de componentes: JavaBeans


Introducción

Mediante una secuencia de imágenes se señala los pasos que han de seguirse para crear un applet mínimo con el Entorno Integrado de Desarrollo (IDE) JBuilder 2.0.

En el primer applet se redefine la función paint, para proporcionar alguna funcionalidad al applet, en este caso mostrar un mensaje. A continuación, se indican los pasos que hay que seguir para publicar un applet una vez que se ha completado el código fuente, y se ha depurado suficientemente:

Finalmente, se explica la forma en la que se comunican el applet y la página web, a través de los parámetros de la etiqueta APPLET.

 

El contexto gráfico

En este apartado, se estudia la clase Graphics, que describe el contexto gráfico de un componente. Los objetos de esta clase llaman a las funciones miembro para dibujar una línea, un rectángulo, una elipse, texto, etc, en el área de trabajo del componente. Se estudian también clases realcionadas como Color, Font y FontMetrics, que describen el color, las  fuentes de texto y las características que las definen.

 

Gestores de diseño

En la superficie del applet se disponen los componentes: los paneles y sobre estos los controles. Para ello, se selecciona con el ratón un componente en la paleta correspondiente y se sitúa sobre el applet o sobre otro componente. Ahora bien, en Java no se pueden situar los componentes en lugares precisos, alinearlos, etc, como ocurre en Windows, ya que en Java existen los denominados gestores de diseño. El más simple de los gestores de diseño es FlowLayout y el más complicado es GridBagLayout.

 

Respuesta a las acciones del usuario sobre los controles.

La versión AWT 1.1 introduce un modelo denominado "Delegation Event Model" completamente distinto de codificar las acciones del usuario sobre los controles. El código de los applets de las versiones 1.0 y 1.1 presenta notables diferencias. Un programador que diseñe interfaces gráficos (GUI) precisa entender los mecanismos de interacción entre el usuario y el programa: cómo se codifica la respuesta a la acción de pulsar sobre un botón, a la de seleccionar un elemento de una lista; cómo se elabora una única respuesta a la acción sobre un conjunto de controles; cómo se verifica la introducción de datos en un control de edición, etc.

La acción más común es la pulsación sobre un botón. Esta situación nos servirá para introducir las bases del nuevo modelo, las definiciones de los distintos términos que intervienen: sucesos (events), componentes, los objetos (listeners) que manejan los sucesos, las funciones respuesta, etc.
A continuación, estudiamos la respuesta a las acciones del usuario sobre controles individuales: el control lista, control selección (Choice), la barra de desplazamiento, y el control de edición. Pasaremos luego, a estudiar la respuesta a las acciones sobre un grupo de controles: un conjunto de tres botones, de tres casillas de verificación o de tres botones de radio.

El ratón es uno de los dispositivos estándares en un interfaz gráfico, que facilita la interacción del usuario con el programa, por lo que saber programar las acciones del ratón es fundamental. Comenzaremos por la acción más simple, la de hacer clic sobre un punto de la pantalla gráfica. A continuación, abordaremos las acciones de pulsar el botón izquierdo del ratón, arrastrarlo y liberarlo, para dibujar "a mano alzada".

El control canvas es importante por que nos permite separar las distintas tareas. El applet controla la interacción usuario/ordenador por medio de los controles y en el canvas se lleva a cabo la representación gráfica, una animación, etc. El problema se presentará a la hora de comunicar los objetos applet y al canvas.

Terminamos este largo y a la vez fundamental capítulo con dos ejercicios que se plantean al lector para que conozca el grado de comprensión de los conceptos explicados hasta este momento.

 

Subprocesos (threads)

El lenguaje Java es muy apropiado para crear subprocesos que corren simultáneamente. Esta no es una característica añadida al lenguaje, sino que el lenguaje ha sido diseñado para que soporte esta característica que nos permite crear programas más simples y fáciles de entender.

Para crear un subproceso hay dos aproximaciones:

En la primer página, estudiaremos qué es un subproceso, y cómo se crea mediante el primer procedimiento. También veremos cuál es el ciclo de vida de un subproceso, y cómo se establecen prioridades entre distintos subprocesos que corren a la vez.

Los subprocesos, en general, no corren uno independientemente del otro. El problema surge a la hora de coordinar las tareas que realizan dos o más subprocesos que acceden a los mismos datos. Por ejemplo, un subproceso se encarga de escribir datos en un buffer y otro proceso se encarga de leerlos. Un ejemplo basado en el modelo Productor/Consumidor intentará aclarar este aspecto complicado.

La creación de animaciones es una aplicación directa de los subprocesos (threads). Como veremos, Java es el lenguaje ideal para programar animaciones en la Web. Vamos a estudiar dos situaciones distintas:

A la primera categoría pertenecen muchos de los programas del Curso Interactivo de Física en Internet.
Respecto de la segunda, estudiaremos la clase MediaTracker que supervisa la carga de las imágenes y otros elementos multimedia a través de la red.

 

Estudio de ejemplos completos

Se estudia una serie de ejemplos, algunos de los cuales forman parte del Curso Interactivo de Física en Internet.

Error en las medidas directas

Se explica cómo se ha creado uno de los applets más simples de programar del Curso Interactivo de Física. Se describirán los objetivos del programa, la creación de clases para distintos propósitos: una clase que describe el interfaz y otra para el tratamiento de los datos. La disposición de los controles en la ventana del applet, y la definición de las funciones respuesta a las acciones del usuario sobre los controles.

Conversión de unidades

Varios son los aspectos que se tratarán en este ejemplo ilustrativo: cómo se crea un grupo de botones de radio. La disposición de los controles empleando el gestor de diseño GridBagLayout. La respuesta a las acciones del usuario sobre un botón, la verificación de los datos introducidos en los controles de edición. La respuesta a las acciones del usuario sobre un grupo de botones de radio.

Diagramas

Las diagramas de barras o en forma de tarta son empleados ampliamente para representar datos. Por ejemplo, los ingresos o gastos que ha tenido una compañía por distintos conceptos. El número de alumnos de una clase que ha suspendido, aprobado, que ha sacado notable o sobresaliente.
La importancia de este ejemplo, estriba en la creación de una jerarquía de clases: una clase base abstracta en la cual se hace un tratamiento de los datos introducidos. De esta clase derivan otras dos que definen la función miembro dibuja para dibujar un diagrama de barras o un diagrama en forma de tarta.

Representación gráfica de una función

La representación gráfica tiene mucha importancia en las ciencias y en la ingeniería ya que nos permite comprender el comportamiento de un sistema de un solo vistazo. En este caso, se representa la ley de la distribución de velocidades de Maxwell, que describe la proporción de moléculas de un gas ideal que tienen una velocidad determinada a una temperatura dada. Este ejemplo, nos permite examinar, el origen, los ejes de la gráfica, las escalas vertical y horizontal. Cómo se ponen divisiones en los ejes y se etiquetan convenientemente, cómo se superponen gráficas de distintos colores para que podamos compararlas, etc.

Un programa de dibujo simple

Se simula un programa de dibujo simple, con una caja de herramientas. En el programa se estudia el modo de dibujo XOR, que nos permite dibujar una figura extensible; la clase Vector para guardar objetos gráficos. Finalmente, podemos optar por definir una clase que describe todas las figuras, o bien crear una jerarquía de clases formada por una clase base abstracta, y por clases derivadas que definen la función que dibuja la figura concreta en un contexto gráfico.

El movimiento de los planetas

El movimiento de los planetas explica un típico applet del Curso Interactivo de Física. Se describen los fundamentos físicos, el procedimiento numérico de cálculo (el método de Runge-Kutta). Se aborda el problema de la animación, es decir, la representación en la ventana del applet de la posición del móvil en función del tiempo. La técnica conocida como double-buffer, para mostrar datos que cambian sin que se aprecie un molesto parpadeo. Finalmente, se explica el diseño del interfaz en base a paneles anidados.

 

La tecnología de componentes: JavaBeans

En la industria electrónica como en otras industrias se está acostumbrado a utilizar componentes para construir placas, tarjetas, etc. En el campo del software la idea es la misma. Se puede crear un interfaz de usuario en un programa Java en base a componentes: paneles, botones, etiquetas, caja de listas, barras de desplazamiento, diálogos, menús, etc.

En este capítulo, se enseña que es un javaBean y cómo se puede crear un javaBean con los asistentes de JBuilder 2.0. A continuación, aprenderemos a insertarlo en la paleta de componentes y usarlo en nuestras aplicaciones. Estudiaremos en detalle sus propiedades y su comportamiento: cómo emite sucesos (events) cuando cambia los valores de sus propiedades ligadas, y cómo se conecta la fuente de los sucesos con otros objetos interesados en la notificación del cambio en los valores de dichas propiedades. Dichos objetos (listeners) reciben información acerca de los sucesos y realizan una determinada tarea.

Finalizaremos este estudio, creando un bean a partir de dos componentes AWT, y que puede tener utilidad para los programadores en el ámbito científico.