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.

Es en ese momento cuando el sistema Java permite al applet controlar el evento. Un valor false indica que el evento ha sido ignorado. El valor devuelto por el método handleEvent() es importante. 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. Indica al sistema Java si el evento ha sido o no completamente controlado por el controlador. el botón que ha sido pulsado) y se desplaza hacia arriba en el árbol de Componentes. 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". Un valor true indica que el evento ha sido controlado y que su propagación debe detenerse. componente a componente. o que no ha sido controlado en su totalidad y debe continuar su propagación hacia arriba en el árbol de Componentes. 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. 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. Veamos la descripción de una acción con el applet de la figura anterior.Cuando un usuario interactúa con el applet. Durante este camino. hasta que alcanza al Contenedor de la raíz del árbol. la . Este control comienza por el Componente que recibe inicialmente el evento (por ejemplo.

el sistema Java presentará la instancia de Event al siguiente Componente por encima en el árbol (en este caso. o no lo hace completamente (indicado por un valor de retorno false).appendText( "Panel " + str + " recibe action.id == Event. } "" . Cada Componente del applet añade una línea al objeto TextArea indicando que ha recibido un evento.MOUSE_DOWN ) ta. else if( evt.. 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. ofrece a éste la posibilidad de reaccionar ante el evento.. El sistema Java comienza entonces por el Componente que ha sido pulsado (en este caso. 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. una instancia de la clase Panel).\n" )..ACTION_EVENT ) 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. return super.\n" ). Luego permite que el evento se propague al siguiente Componente.handleEvent( evt ). el botón "Uno") y.appendText( "Panel " + str + " recibe mouse_down. Si el Componente no controla el evento.id == Event. a través de una llamada al método handleEvent() del Componente.localización del click. En la figura siguiente mostramos el camino recorrido por el evento en su intento de que algún Componente lo controle..

194 | siguiente > "" Los eventos se catalogan por su naturaleza. Extraido de: http://www.publispain.nyfa..edu/Produccion Anuncios Google < anterior | 1 ..Tipos de Eventos Tutorial creado por Agustín Froufe . que se indicará en el miembro id de su estructura.Tutorial de Java . o o o o KEY_PRESS KEY_RELEASE KEY_ACTION KEY_ACTION_RELEASE . La Academia De Cine NY. Entra Ya! www.com/supertutoriales/ 08 Mayo 2007 Escuela De Producción Considerada La Mejor Del Mundo. 105 106 107 108 109 . 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. 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 107 .

o o LIST_SELECT LIST_DESELECT Eventos Varios Son los eventos generados en función de diversas acciones. . 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 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.Eventos de Ratón Son los eventos generados por acciones sobre el ratón dentro de los límites de un Componente.

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

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

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

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

.

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

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

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

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

Sign up to vote on this title
UsefulNot useful