Generacion y Propagacion de Eventos

4
GENERACION Y PROPAGACION DE EVENTOS Tomemos el applet, EventosPro.java, consta de dos instancias de la clase Button , embebidas dentro de una instancia de la clase Panel . Esta instancia está a su vez embebida dentro de otr instancia de la clase Panel . Esta última instancia de la clase Panel está situada junto a u de la clase TextArea , y ambas están embebidas dentro de una instancia de la clase Applet . Cuando un usuario interactúa con el applet, el sistema Java crea una instancia de l Eventy rellena su dato miembro con la información necesaria para describir la acción. Es e cuando el sistema Java permite al applet controlar el evento. Este contr Componente que recibe inicialmente el evento (por ejemplo, el botón que ha sido pul desplaza hacia arriba en el árbol de Componentes, componente a componente, hasta qu al Contenedor de la raíz del árbol. Durante este camino, cada Componente tiene opor ignorar el evento o reaccionar ante él en una (o más) de las formas siguientes: Modificar los datos miembros de la instancia de Event Entrar en acción y realizar cálculos basados en la información contenida en e Indicar al sistema Java que el evento no debería propagarse más arriba en el El sistema Java pasa información del evento a un Componente a través del método handleEvent () del Componente. Todos los métodos handleEvent () deben ser de la forma: Public boolean handleEvent (Event evt ) Un controlador de eventos solamente necesita una información: una referencia a la i clase Eventque contiene la información del evento que se ha producido. El valor devuelto por el método handleEvent () es importante. Indica al sistema Java si el evento sido o no completamente controlado por el controlador. Un valor true indica que el evento ha sido controlado y que su propagación debe detenerse. Un valor false indica que el evento ha sido ignorado, o que no ha sido controlado en su totalidad y debe continuar arriba en el árbol de Componentes. Veamos la descripción de una acción con el applet de la figura anterior. El usuario "Uno". El sistema run-time del lenguaje Java capturará la información sobre el even de clicks, la localización del click, la hora en que se ha producido la pulsación y ha recibido el click) y empaqueta todos esos datos en una instancia de la clase Event . El sistema Java comienza entonces por el Componente que ha sido pulsado (en este caso, el botó a través de una llamada al método handleEvent () del Componente, ofrece a éste la posibilidad de reaccionar ante el evento. Si el Componente no controla el evento, o no lo hace com (indicado por un valor de retorno false ), el sistema Java presentará la instancia de siguiente Componente por encima en el árbol (en este caso, una instancia de la clas Panel ). El sistema Java continúa de este mismo modo hasta que el evento es controlado en su to

Transcript of Generacion y Propagacion de Eventos

GENERACION Y PROPAGACION DE EVENTOS Tomemos el applet, EventosPro.java, consta de dos instancias de la clase Button, embebidas dentro de una instancia de la clase Panel. Esta instancia est a su vez embebida dentro de otra instancia de la clase Panel. Esta ltima instancia de la clase Panel est situada junto a una instancia de la clase TextArea, y ambas estn embebidas dentro de una instancia de la clase Applet. Cuando un usuario interacta con el applet, el sistema Java crea una instancia de la clase Event y rellena su dato miembro con la informacin necesaria para describir la accin. Es en ese momento cuando el sistema Java permite al applet controlar el evento. Este control comienza por el Componente que recibe inicialmente el evento (por ejemplo, el botn que ha sido pulsado) y se desplaza hacia arriba en el rbol de Componentes, componente a componente, hasta que alcanza al Contenedor de la raz del rbol. Durante este camino, cada Componente tiene oportunidad de ignorar el evento o reaccionar ante l en una (o ms) de las formas siguientes:

Modificar los datos miembros de la instancia de Event Entrar en accin y realizar clculos basados en la informacin contenida en el evento Indicar al sistema Java que el evento no debera propagarse ms arriba en el rbol

El sistema Java pasa informacin del evento a un Componente a travs del mtodo handleEvent () del Componente. Todos los mtodoshandleEvent () deben ser de la forma: Public boolean handleEvent (Event evt ) Un controlador de eventos solamente necesita una informacin: una referencia a la instancia de la clase Event que contiene la informacin del evento que se ha producido. El valor devuelto por el mtodo handleEvent () es importante. Indica al sistema Java si el evento ha sido o no completamente controlado por el controlador. Un valor true indica que el evento ha sido controlado y que su propagacin debe detenerse. Un valor false indica que el evento ha sido ignorado, o que no ha sido controlado en su totalidad y debe continuar su propagacin hacia arriba en el rbol de Componentes. Veamos la descripcin de una accin con el applet de la figura anterior. El usuario pulsa el botn "Uno". El sistema run-time del lenguaje Java capturar la informacin sobre el evento (el nmero de clicks, la localizacin del click, la hora en que se ha producido la pulsacin y el Componente que ha recibido el click) y empaqueta todos esos datos en una instancia de la clase Event. El sistema Java comienza entonces por el Componente que ha sido pulsado (en este caso, el botn "Uno") y, a travs de una llamada al mtodo handleEvent () del Componente, ofrece a ste la posibilidad de reaccionar ante el evento. Si el Componente no controla el evento, o no lo hace completamente (indicado por un valor de retorno false), el sistema Java presentar la instancia de Event al siguiente Componente por encima en el rbol (en este caso, una instancia de la clase Panel). El sistema Java contina de este mismo modo hasta que el evento es controlado en su totalidad o ya

no hay Componentes a los que informar. En la figura siguiente mostramos el camino recorrido por el evento en su intento de que algn Componente lo controle. Cada Componente del applet aade una lnea al objeto TextArea indicando que ha recibido un evento. Luego permite que el evento se propague al siguiente Componente. El cdigo del controlador de eventos usado en el ejemplo es el que muestran las siguientes lneas: public boolean handleEvent (Event evt) { if( evt.id == Event. ACTION_EVENT) ta.appendText (Panel " + str + " recibe action...\n" ); else if( evt.id == Event. MOUSE_DOWN) ta.appendText (Panel " + str + " recibe mouse_down...\n" ); return super.handleEvent (evt ); 4.7.4 METODOS DE CONTROL DE EVENTOS El mtodo handleEvent () es un lugar para que el programador pueda insertar cdigo para controlar los eventos. A veces, sin embargo, un Componente solamente estar interesado en eventos de un cierto tipo (por ejemplo, eventos del ratn). En estos casos, el programador puede colocar el cdigo en un mtodo de ayuda, en lugar de colocarlo en el mtodo handleEv ent (). No hay mtodos de ayuda para ciertos tipos de eventos, aqu est la lista de los que estn disponibles para los programadores: action( Event evt,Object obj ) gotFocus( Event evt,Object obj ) lostFocus( Event evt,Object obj )mouseEnter( Event evt,int x,int y )mouseExit( Event evt,int x,int y )mouseMove( Event evt,int x,int y ) mouseUp( Event evt,int x,int y ) mouse Down( Event evt,int x,int y ) mouseDrag( Event evt,int x,int y ) keyDown( Event evt,int key ) keyUp( Event evt,int key ) False indicar que el mtodo de ayuda no maneja el evento. La implementacin del mtodo handleEvent () proporcionada por la clase Component invoca a cada mtodo de ayuda. Por esta razn, es importante que las implementaciones redefinidas del mtodo handleEvent () en clases derivadas, siempre finalicen con la sentencia: return( super.handleEvent( evt ) );El siguiente trozo de cdigo ilustra esta regla.public boolean handleEvent( Event evt ) {if( evt.target instanceof MiBoton ){// Hace algo...return true;}return( super.handleEvent( evt ) );}No seguir esta regla tan simple har que no se invoquen adecuadamente los mtodos de ayuda. El applet EventosRaton.java, que controla los eventos de ratn exclusivamente a travs de cdigo insertado en sus mtodos de ayuda; va dibujando una lnea (rubber band) entre el ltimo punto donde se ha producido un click de ratn y la posicin actual del cursor. ACTION_EVENT

Algunos de los eventos que ms frecuentemente tendremos que controlar son los siguientes:

ACTION_EVENT MOUSE_DOWN KEY_PRESS WINDOW_DESTROY En la documentacin de la claseEvent se encuentra toda la lista de eventos que cualquier aplicacin puede necesitar manejar y su documentacin; como ejemplo de uso vamos a detenernos en el primero de ellos, ACTION_EVENT. Como ejemplo del manejo de eventos vamos a ver este evento que se provoca al pulsar un botn, seleccionar un men, etc. Para su control podemos manejarlo en el mtodo handleEv ent () o en el mtodo action ().Los dos mtodos anteriores pertenecen a la clase Component por lo que todas las clases derivadas de sta contendrn estos dos mtodos y se pueden sobrecargar para que se ajuste su funcionamiento a lo que requiere nuestra aplicacin. MEJORAR EL DISEO DE INTERFACES

La interface de usuario es el aspecto ms importante de una aplicacin, tal como ya hemos repetido. Un diseo pobre de la interface es un grave problema para que el usuario pueda obtener todo el partido posible de la aplicacin. Para ser efectivos, no debemos limitarnos a colocar una serie de botones, etiquetas y barras de desplazamiento sobre la pantalla. Desafortunadamente, nadie ha determinado una reglas correctas para del diseo de una buena interface. CAMBIO DE FUENTE DE CARACTERES

El Font de caracteres con el que se presenta un texto en pantalla influye mucho en el impacto de una interface. Una interface efectiva no debera utilizar una maraa de fuentes, pero s que debera utilizar dos o tres diferentes para aumentar el atractivo y la efectividad de los textos. El applet Fuentes.java. COLORES DE FONDO Y TEXTO

El impacto visual del color nunca debe ser desestimado cuando se ataca el diseo de una interface de usuario. El color tiende a atraer la visin y puede utilizarse para llamar la atencin sobre una parte importante del interface. En el ejemplo siguiente, el color rojo alrededor del botn hace que la vista se fije inmediatamente en l. FIJAR EL TAMAO PREFERIDO

Otro ingrediente importante de una buena interface es el tamao con el cual aparecer un Componente o Contenedor en la pantalla. En el corazn del control de la composicin del interface est el layout manager, que es capaz de fijar el tamao y la posicin de los Componentes que se vayan incorporando al layout que est manejando. Esto, indirectamente, tambin influye en el tamao del Contenedor

BOTON GRAF I C O

AWT adolece de herramientas ya desarrolladas para implementar interfaces al uso, con alta proliferacin de imgenes y facilidades para que el programador utilice directamente Componentes. Sin embargo, s proporciona las herramientas suficientes como para que se puedan implementar cualquier tipo de Componentes, o modificar al gust los ya existentes. Para mostrar un ejemplo, vamos a implementar un botn grfico, BotonGrafico.java. Partimos de un botn normal al cual aplicaremos tres imgenes diferentes, para cada uno de los tres estados en que puede encontrarse: pulsado, liberado e inhabilitado.