Professional Documents
Culture Documents
-EVENTOS
Los eventos son el medio como interacta una clase con otras o con el propio usuario, se encargan de avisar que algo ha ocurrido y de manejarlo de una forma o de otra. Cada vez que escribimos con nuestro teclado, que hacemos clic en un botn o un link, que cambiamos el tamao de un objeto, estamos generando eventos.
1.1.-TIPOS DE EVENTOS
Eventos de alto nivel: son los que tienen que ver con clicar botones o elegir comandos (ActionEvent), cambiar valores en barras de desplazamiento (AdjustmentEvent), elegir valores (ItemEvents) o cambiar el texto (TextEvent). Eventos de bajo nivel: son las acciones elementales que hacen posible los eventos de alto nivel y que se producen con las operaciones elementales de los componentes (ComponentEvent), con los containers (ContainerEvent), con pulsar teclas (KeyEvent), con todo lo que tenga que ver con el uso del ratn (MouseEvent), con obtener o perder el focus (FocusEvent) y con las operaciones con ventanas (WindowEvent) ComponentEvent: Se producir este tipo de evento cuando el usuario mueva o redimensione un componente. FocusEvent: Se producir este tipo de evento cuando se cambie el foco de un componente. El foco hace referencia al componente en el que estamos trabajando. MouseEvent: Se producir cuando el usuario efecte un movimiento con el ratn o haga un clic. WindowEvent: se producir cuando se realice algn tipo de operacin con la ventana como abrirla y cerrarla. ActionEvent: Se producir cuando se efecte alguna componente, como por ejemplo: la presionar un botn. accin sobre un
Aqu se presenta los elementos que conforman este applet en forma de rbol, con el TextArea y Button como hojas y la instancia de Applet como raiz.
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 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 la forma siguiente:
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 mtodos handleEvent () deben ser de la forma:
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.
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.
1.4.-CREACIN DE EVENTOS
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 clase Event 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 //handleEvent()// 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. Veamos el siguiente ejemplo, en que se controla este evento a travs del mtodo //handleEvent ()//, que es el mtodo general de manejo de eventos:
public boolean handleEvent( Event evt ) { switch( evt.id ) { case Event.ACTION_EVENT: // evt.arg contiene la etiqueta del botn pulsado // o el item del men que se ha seleccionado if( ( "Pulsado "+n+" veces" ).equals( evt.arg ) ) return( true ); default: return( false ); } } Pero en este caso, cuando se produce este evento se llama al mtodo //action()//, que sera: public boolean action( Event evt,Object arg ) { if( ( "Pulsado "+n+" veces" ).equals( arg ) ) return( true ); return( false ); } Como se puede comprobar, incluso si las etiquetas cambian se puede recibir el evento. Los ejemplos anteriores corresponden al control de un evento producido por un botn que cambia su etiqueta cada vez que se pulsa. Aunque esta no es la nica forma de manejar eventos; de hecho se puede hacer: