Generación y Propagación de Eventos

Tutorial creado por Agustín Froufe . Extraido de: http://www.publispain.com/supertutoriales/ 08 Mayo 2007
Inscríbete. Cursos Nuevos Cursos de 3d, Web, Autocad, Excel, Aprende lo último en Software y mas www.d4reality.com/Cuernavaca Anuncios Google
< anterior

| 1 .. 106 107 108 109 110 .. 194 | siguiente >

"" Tomemos el applet, EventosPro.java, que aparece en la figura siguiente. 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 están embebidas dentro de una instancia de la clase Applet.

La figura siguiente 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.

Durante este camino. el sistema Java crea una instancia de la clase Event y rellena sus datos miembro con la información necesaria para describir la acción. 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 instancia de la clase Event que contiene la información del evento que se ha producido. hasta que alcanza al Contenedor de la raíz del árbol. la . El sistema run-time del lenguaje Java capturará la información sobre el evento (el número de clicks. El usuario pulsa el botón "Uno". 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. Un valor true indica que el evento ha sido controlado y que su propagación debe detenerse. el botón que ha sido pulsado) y se desplaza hacia arriba en el árbol de Componentes. componente a componente. Un valor false indica que el evento ha sido ignorado. Indica al sistema Java si el evento ha sido o no completamente controlado por el controlador. o que no ha sido controlado en su totalidad y debe continuar su propagación hacia arriba en el árbol de Componentes. El valor devuelto por el método handleEvent() es importante. Veamos la descripción de una acción con el applet de la figura anterior.Cuando un usuario interactúa con el applet. cada Componente tiene oportunidad de ignorar el evento o reaccionar ante él en una (o más) de las forma siguientes: o o o Modificar los datos miembros de la instancia de Event Entrar en acción y realizar cálculos basados en la información contenida en el evento Indicar al sistema Java que el evento no debería propagarse más arriba en el árbol El sistema Java pasa información del evento a un Componente a través del método handleEvent() del Componente.

. el sistema Java presentará la instancia de Event al siguiente Componente por encima en el árbol (en este caso.\n" ).. El sistema Java comienza entonces por el Componente que ha sido pulsado (en este caso. Cada Componente del applet añade una línea al objeto TextArea indicando que ha recibido un evento. a través de una llamada al método handleEvent() del Componente. Si el Componente no controla el evento.\n" ). ofrece a éste la posibilidad de reaccionar ante el evento. En la figura siguiente mostramos el camino recorrido por el evento en su intento de que algún Componente lo controle... una instancia de la clase Panel). } "" . la hora en que se ha producido la pulsación y el Componente que ha recibido el click) y empaqueta todos esos datos en una instancia de la clase Event. return super.localización del click. o no lo hace completamente (indicado por un valor de retorno false).MOUSE_DOWN ) ta. El sistema Java continúa de este mismo modo hasta que el evento es controlado en su totalidad o ya no hay Componentes a los que informar. El código del controlador de eventos usado en el ejemplo es el que muestran las siguientes líneas: public boolean handleEvent( Event evt) { if( evt.ACTION_EVENT ) ta.id == Event. Luego permite que el evento se propague al siguiente Componente. else if( evt.handleEvent( evt ).appendText( "Panel " + str + " recibe mouse_down.appendText( "Panel " + str + " recibe action.id == Event. el botón "Uno") y.

. 194 | siguiente > "" Los eventos se catalogan por su naturaleza. La Academia De Cine NY. o o o o KEY_PRESS KEY_RELEASE KEY_ACTION KEY_ACTION_RELEASE .publispain. Extraido de: http://www. Los grandes grupos de eventos son: Eventos de Ventana Son los que se generan en respuesta a los cambios de una ventana un frame o un dialogo.com/supertutoriales/ 08 Mayo 2007 Escuela De Producción Considerada La Mejor Del Mundo.Tipos de Eventos 107 . Entra Ya! www.edu/Produccion Anuncios Google < anterior | 1 ..Tutorial de Java . 105 106 107 108 109 .nyfa. que se indicará en el miembro id de su estructura. o o o o o WINDOW_DESTROY WINDOW_EXPOSE WINDOW_ICONIFY WINDOW_DEICONIFY WINDOW_MOVED Eventos de Teclado Son generados en respuesta a cuando el usuario pulsa y suelta una tecla mientras un Componente tiene el foco de entrada.Tipos de Eventos Tutorial creado por Agustín Froufe .

o o o o o o MOUSE_DOWN MOUSE_UP MOUSE_MOVE MOUSE_ENTER MOUSE_EXIT MOUSE_DRAG Eventos de Barras Son los eventos generados como respuesta a la manipulación de barras de desplazamiento (scrollbars). o o LIST_SELECT LIST_DESELECT Eventos Varios Son los eventos generados en función de diversas acciones. .Eventos de Ratón Son los eventos generados por acciones sobre el ratón dentro de los límites de un Componente. o o o o o SCROLL_LINE_UP SCROLL_LINE_DOWN SCROLL_PAGE_UP SCROLL_PAGE_DOWN SCROLL_ABSOLUTE Eventos de Lista Son los eventos generados al seleccionar elementos de una lista.

public void init() { lista = new List( 25.println() en un applet es algo que no debería utilizarse. vamos a reescribir el código del applet utilizando una Lista.o o o o o ACTION_EVENT LOAD_FILE SAVE_FILE GOT_FOCUS LOST_FOCUS El applet EventosPrnt. o en la consola Java en caso de Netscape. import java. Una Lista es una lista de cadenas o Strings definidas en java.awt. vayan apareciendo los textos que indican los eventos que está recibiendo el applet. Las acciones anteriores harán que en la ventana en donde se haya lanzado el appletviewer.out. public class EventosList extends Applet { List lista. El código EventosList. Una vez que se haya compilado el código y cargado el applet en el appletviewer o en un navegador con soporte Java. Mover el cursor dentro del applet. No obstante.*.Applet. import java.List.false ). pero tenía la ventaja de ser la forma más fácil de ver los eventos.addItem( "Evento init" ).applet.java está diseñado para observar los eventos que se producen sobre él. picar y arrastrar.java que se muestra a continuación corresponde al anterior ejemplo un poco modificado. el applet responde imprimiendo el evento que ha capturado en la línea de comandos desde donde se ha lanzado el applet.awt. Lo cierto es que el uso de System. } . e incluso puede llegar a no funcionar en algunos sistemas. Crearemos una lista de 25 líneas y no permitiremos selección múltiple. que son los dos parámetros que necesita el constructor del objeto List. Cada vez que se genera un evento. add( lista ). jugar un poco con el applet. picar con el ratón. cambiar el tamaño de la ventana y taparla y destaparla con otra. lista. teclear algo.

int y ) { lista.addItem( "Evento start" ).addItem( "Evento destroy" ).int x."+y+")" ). } public boolean mouseDown( Event evt.int x. } public boolean mouseDrag( Event evt. int y ) { lista. } . return false.addItem( "Evento mouseDown en ("+x+". } public void update( Graphics g ) { lista. int y ) { lista. } public void paint( Graphics g ) { lista."+y+")" ).public void start() { lista.addItem( "Evento update" )."+y+")" ). } public boolean mouseUp( Event evt.addItem( "Evento paint" ).addItem( "Evento mouseUp en ("+x+". return false.int x.addItem( "Evento mouseDrag en ("+x+". return false. } public void destroy() { lista.

} public void lostFocus() { .addItem( "Evento mouseMove en ("+x+".carácter "+(char)x ).int x. return false."+y+")" )."+y+")" ). return true. } public void getFocus() { lista.public boolean mouseMove( Event evt.addItem( "Evento getFocus" ). } public boolean mouseEnter( Event evt. return false.int x ) { lista.addItem( "Evento mouseEnter en ("+x+".int x. return false.addItem( "Evento gotFocus" ).int x. int y ) { lista. int y ) { lista. } public boolean keyDown( Event evt. } public boolean mouseExit( Event evt.addItem( "Evento mouseExit" ). int y ) { lista. } public void gotFocus() { lista.addItem( "Evento keyDown.

podemos observar los datos que el sistema Java envía en la recolección de esos eventos.java muestra los datos que componen cada evento que se produce.addItem( "Evento lostFocus" ). Moviendo el ratón o actuando sobre los dos Componentes. Hemos incorporado un botón y una lista. para poder generar diferentes eventos. } } El applet VisorEventos.lista. botón y lista. tal como se puede apreciar en la figura. .

.

singularmente de los relacionados con el movimiento del ratón. when . Para objetos Button.106 . InstitutoMaurer.El siguiente evento en una lista encadenada de eventos Una instancia de la clase Event será creada por el sistema Java cada vez que se genere un evento. este objeto //arg// es un objeto String que contiene la etiqueta de texto del botón evt .La clase Event Tutorial creado por Agustín Froufe . La clase Event es el jugador principal en el juego de los eventos. pulsaciones de teclas. Alt. Su valor será el valor Unicode del carácter que representa la tecla.Las coordenadas en donde se ha producido el evento relativas al Componente que actualmente está procesando ese evento. 194 | siguiente > Un contenedor //soltado// en un entorno gráfico se convierte en rápido receptor de eventos de todo tipo.Componente sobre el que se ha producido el evento x. que un programa cree y envíe eventos a los Componentes a través de su método //postEvent()//. F2. clickCount .La combinación aritmética del estado en que se encuentran las teclas modificadoras Mays. FIN.com.Instante en que se ha producido el evento modifiers . por último. creación/movimiento/destrucción de partes gráficas y.Es un argumento dependiente del evento. Los datos miembro de la clase Event son los que se indican a continuación: id .El tipo de evento que se ha producido target . Intenta capturar las características fundamentales de todos los eventos que genera el usuario. El origen se toma en la esquina superior izquierda del Componente key .mx Anuncios Google < anterior | 1 . y . Otros valores que puede tomas son los de las teclas especiales como INICIO.. Extraido de: http://www.). Ctrl. pulsación de un botón. sin embargo. Rápido y Económico.. los referidos a acciones del usuario respecto de componentes (elección de un menú. Fácil. es la tecla que se ha pulsado.publispain. Sólo tiene importancia en los eventos MOUSE_DOWN arg .Para eventos de teclado. etc. F1.El número de clicks de ratón consecutivos. etc.com/supertutoriales/ 08 Mayo 2007 Aprende Contabilidad y Obtén tu Diploma sin salir de tu Casa. . Es posible. 104 105 106 107 108 .

De la misma forma que otros lenguajes de programación.awt.d4reality. public class HolaMundo extends Applet { public void paint( Graphics g ) { g. Autocad. 194 | siguiente > Vamos a comenzar la creación del código fuente del un applet que satisfaga nuestras necesidades.Un Applet basico en Java Tutorial creado por Agustín Froufe .applet. Excel.com/supertutoriales/ 08 Mayo 2007 Inscríbete. Web. Recordamos que Java utiliza la extensión .java HolaMundo.drawString( "Hola Mundo!".Graphics.com/Cuernavaca Anuncios Google < anterior | 1 . } } ==== //Componentes básicos de un Applet// ==== El lenguaje Java implementa un modelo de Programación Orientada a Objetos.publispain.. que es la versión applet de la mínima aplicación Java que antes habíamos escrito. import java. Aprende lo último en Software y mas www. Los objetos sirven de bloques centrales de construcción de los programas Java.Un Applet basico en Java 40 . Veamos como se descompone un applet en sus piezas/objetos: /* Sección de importaciones */ .. 38 39 40 41 42 .25. Guardar este código en un fichero fuente Java como http://www. Cursos Nuevos Cursos de 3d.25 ) .java para designar los ficheros fuente. Java tiene variables de estado y métodos.Tutorial de Java . Extraido de: http://www.Applet. ==== //HolaMundo// ==== A continuación está el código fuente del applet HolaMundo.com/supertutoriales/diseno/java/cursos/3/Fuentes/Cap2/HolaMundo.publispain.java. // // Applet HolaMundo de ejemplo // import java.

Qué código se use depende del applet */ } } Para HolaMundo. Esta clase define una área gráfica y métodos para poder dibujar dentro de ella.25.int y. No hay variables de estado. Modificando determinados métodos del applet.drawString( "Hola Mundo!".int ancho. extendiendo la clase básica de Java: Applet. } De acuerdo a las normas de sobrecarga.. se ejecutará este último //paint()// y no el //paint()// vacío de la clase Applet. y podremos llamar a los métodos de esta clase desde cualquier método de nuestro programa que se encuentre en el fichero //HolaMundo. podemos lograr que lleve a cabo las funciones que deseamos. public class HolaMundo extends Applet { //Métodos de Applet// La parte del applet a modificar es el método //paint()//. que le dice al applet cómo debe aparecer un texto en el área de dibujo.int alto ) . La función //paint()// declara a ##g## como un objeto de tipo //Graphics//. se hereda todo lo necesario para crear un applet..public class NombreDelNuevoApplet extends Applet { /* Aquí se declaran las variables de estado (public y private) */ /* Los métodos para la interacción con los objetos se declaran y definen aquí */ public void MetodoUno( parámetros ) { /* Aquí viene para cada método. en este caso HolaMundo. En nuestro caso. //La clase Applet// Se puede crear una nueva clase. aquí se ejecuta el método //drawString()//. luego. se importan las dos clases que necesita.Graphics//. el código Java que desempeña la tarea. //paint()// usa el método //drawString()// de la clase Graphics para generar su salida.Applet. De esta forma.awt. Por ejemplo.int y2 ) drawRect( int x.int y1. import java. . Otros métodos básicos para dibujar son: drawLine( int x1.int x2.int alto ) drawOval( int x. Luego.int y. lo que hacemos es: public void paint( Graphics g ) { g.java//.applet. y sólo se tiene que definir un método para que el applet tenga el comportamiento esperado.int ancho. //Clases incluidas// El comando ##import## carga otras clases dentro de nuestro código fuente.25 ). se llama al método paint() cada vez que el método arranca o necesita ser refrescado. En la clase Applet. pero no hace nada. El importar una clase desde un paquete de Java hace que esa clase importada esté disponible para todo el código incluido en el fichero fuente Java que la importa. en el applet HolaMundo se importa la clase //java.

las coordenadas (##x.com/tutorial/tutorial_de_javageneracion_y_propagacion_de_eventos/3938-108 http://www.Tanto para //drawRect()// como para //drawOval()//.publispain. http://www.y##) son la esquina superior izquierda del rectángulo (para drawOval.wikilearning.com/supertutoriales/diseno/java/cursos/3/Cap4/tipoev. el óvalo es encajado en el rectángulo que lo circunscribe).html .