| Artículos | 01 ENE 1999

Programación de componentes AWT

Tags: Histórico
Curso de Java para Internet (7)
Jaime Peña.

En este artículo, además de mostrar cómo incluir componentes de la biblioteca AWT en sus applets, ilustraremos el método de interactuar con ellos ( respuesta a eventos ) . Para eso, nos apoyaremos en sucesivos ejemplos que, en muchos casos, realizarán las mismas operaciones, pero usando componentes diversos . A la par, procuraremos también mostrar modos alternativos de extraer información de los métodos de respuesta a eventos .

Control de eventos

En nuestro anterior artículo de este curso, ya habíamos expuesto cómo trabajar con botones de comando ( clase Button ) e ilustramos unos ejemplo ( véanse los códigos en el interior del texto del artículo ) , en los que hablábamos de cómo fijar etiquetas y posicionamiento de los componentes .

Dado que se trata de un curso introductorio, en el que pretendemos dotar de las capacidades más comunes a nuestras páginas web, utilizaremos el sistema de gestión de eventos al viejo estilo ( el compatible con el JDK 1 . 0 . x y aún soportado por los posteriores ) . Esto también tiene sus ventajas, ya que así podrán visualizarse y ejecutarse los applets de Java en todos los navegadores, incluyendo las versiones 3 . x de Microsoft Internet Explorer y Netscape Navigator .

Si observa el Listado 31, encontrará un muy sencillo ejemplo de gestión de eventos, al pulsar un botón, conforme al JDK 1 . 0 . x . A modo de comparación, incluimos otro ejemplo en el Listado 32, es un applet equivalente, pero utilizando el sistema de gestión de eventos al estilo del JDK 1 . 1 . x y posteriores ( usando los denominados Action Listeners ) .

Note la estructura básica de un método de respuesta a eventos según el JDK 1 . 0 . x, algo que ilustramos en el Listado 31:

public boolean action ( Event e, Object label ) {

System . out . println ( ?Pulsado ? + label ) ;

return true;

}

Observe que el método toma dos parámetros, de las clases Event y Object, que contendrán la información acerca del tipo de evento y del componente que lo ha emitido . En ellos nos basaremos para tomar decisiones de qué acciones se deben realizar . Dado que el método es de tipo booleano, deberemos devolver true si se ha procesado el evento y false si no lo hemos filtrado ( véanse los ejemplos posteriores en este mismo artículo ) . Respecto al objeto de la clase Event, al que tendremos acceso en este método, contiene la información que comentamos seguidamente .

La más interesante es la propiedad target, que es el objeto que ha emitido el evento, es el mismo que se obtiene del otro parámetro del método action ( ? ) ( Object label ) . Así, podríamos haber codificado:

System . out . println ( ?Pulsado ? + ( ( Button ) e . target ) . getLabel ( ) ) ;

que devuelve la etiqueta del botón pulsado . Observe que se debe hacer un casting ( conversión de tipo ) a la clase Button y utilizar el método getLabel ( ? ) . Por tanto, es alternativo y útil en muchos casos, pero es más directo utilizar:

System . out . println ( ?Pulsado ? + label ) ;

Por otra parte, las propiedades id, x, y y key informan de, respectivamente, el identificativo del tipo de evento producido ( por ejemplo, pulsar una tecla o hacer clic con el ratón ) las cotas x e y del lugar físico de la ventana en que se produjo el evento ( sobre un componente, dará las cotas del borde superior izquierdo del componente ) y de la tecla pulsada, si se trata de una pulsación de teclas . Por ejemplo, podríamos incluir en nuestro ejemplo lo que sigue y observar los datos de salida en la ventana DOS:

System . out . println ( ?Cota X ?+e . x ) ;

System . out . println ( ?Cota Y ? + e . y ) ;

System . out . println ( ?Tipo de evento ? + e . id ) ;

Otra posibilidad sería utilizar el método handleEvent ( ? ) , en una forma similar a como se recoge en el Listado 33, que comentaremos más abajo:

public boolean handleEvent ( Event evt ) {

switch ( evt . id ) {

case Event . ACTION_EVENT: {

if ( ( ?Rojo? ) . equals ( evt . arg ) ) {

this . setBackground ( Color . red ) ;

repaint ( ) ;

return true;

}

}

default:

return false;

}

En el que el único parámetro es del tipo Event . La propiedad ACTION_EVENT es de tipo booleano y nos indica si se trata de algo que el usuario espera poder capturar y actuar en consecuencia ( por ejemplo un clic sobre un botón de comando, como es este caso ) . Aquí, para identificar el objeto que ha emitido el evento se usa:

if ( ( ?Rojo? ) . equals ( evt . arg ) )

Que devuelve true si la etiqueta del objeto coincide con la cadena con la que se compara, mediante el método equals ( ? ) . Esta aproximación es la más común .

Tanto el Listado 31 como el 32, ejemplifican el caso de un único botón, lo que simplifica el tratamiento de gestión de eventos, ya que sólo hay que responder a una posibilidad única . En el Listado 33 damos un paso más allá y trabajamos con tres botones de comando, que al ser pulsados, fijan el color de fondo del applet ( rojo, verde o azul ) . Utilizamos la estrategia anterior para diferenciar qué botón ha sido pulsado; creemos que el código es suficientemente explicativo y le dará una idea exacta de cómo actuar en el caso de interactuar con múltiples controles AWT .

Menús emergentes ( Choice )

Los menús emergentes ( aquellos que se despliegan en la ventana AWT ) , no son exactamente los mismos que usted estará acostumbrado a ver en el caso de aplicaciones Windows, ya que no se trata de hacerlos visibles con el botón derecho del ratón, sino que se asemejan a listas desplegables, en las que se expone, únicamente, la primera de las entradas ( por tanto, algo semejante a las listas de los documentos HTML ) . En el Listado 34, recogemos un ejemplo similar al expuesto anteriormente, véase el Listado 33 . En esta ocasión, la selección del color de fondo del applet se realiza mediante un menú emergente, derivado de la clase Choice .

La clase deriva de Object ComponentChoice, y se crea mediante el constructor de clase public Choice ( ) . Posteriormente, se añadirán las entradas ( opciones ) , mediante el método void addItem ( String Item ) . Por ejemplo, el código:

Choice colorFondo = new Choice ( ) ;

colorFondo . addItem ( ?Rojo? ) ;

colorFondo . addItem ( ?Verde? ) ;

colorFondo . addItem ( ?Azul? ) ;

add ( colorFondo ) ;

Crearía una lista, en formato menú emergente AWT, con tres opciones de selección de color; observe que, posteriormente, se incluye el objeto Choice al applet mediante el método add ( ? ) , como es habitual . El método de obtención del elemento actualmente seleccionado es: public synchronized String getSelectedItem ( ) , que devuelve el nombre de la opción creada con el método addItem ( ? ) .

Veamos ahora cómo interactuar con un objeto Choice, creado como mostramos anteriormente . Una vez se selecciona un elemento de la lista, se emite un mensaje, que puede recogerse en el método handleEvent ( ? ) y allí determinar qué elemento es el que notifica el evento ( sobre el que se ha hecho clic ) . Fíjese nuevamente en el Listado 34:

public boolean handleEvent ( Event evt ) {

switch ( evt . id ) {

case Event . ACTION_EVENT: {

if ( ( ?Rojo? ) . equals ( evt . arg ) ) {

// acciones a ejecutar

}

// Restantes posibilidades

En esta fracción de código se contiene todo lo fundamental, que como ve no difiere en absoluto de lo mostrado para el

Contenidos recomendados...

Comentar
Para comentar, es necesario iniciar sesión
Se muestran 0 comentarios
X

Uso de cookies

Esta web utiliza cookies técnicas, de personalización y análisis, propias y de terceros, para facilitarle la navegación de forma anónima y analizar estadísticas del uso de la web. Consideramos que si continúa navegando, acepta su uso. Obtener más información