Modelos Eventos Java

download Modelos Eventos Java

of 21

Transcript of Modelos Eventos Java

  • 7/25/2019 Modelos Eventos Java

    1/21

    Universidad Nacional de Piura F.I.I. E.I.I Programacin II

    _____________________________________________________________________

    3.1.3. Modelo de Eventos en JavaEntendemos por evento una accin o cambio en una aplicacin que permite que dichaaplicacin produzca una respuesta. El modelo de eventosde AWT se descompone en dosgrupos de elementos: las fuentes y los oyentes de eventos. Las fuentesson los elementos quegeneran los eventos un botn! un cuadro de te"to! etc#! mientras que los oyentes sonelementos que est$n a la espera de que se produzcan# determinados# tipos# de eventos#

    para emitir determinadas# respuestas#.%ara poder gestionar eventos! necesitamos definir el manejador de eventoscorrespondiente!un elemento que act&e de oyente sobre las fuentes de eventos que necesitemos considerar.'ada tipo de evento tiene asignada una interfaz! de modo que para poder gestionar dichoevento! el mane(ador deber$ implementar la interfaz asociada. Los oyentes m$s comunes son:

    ActionListener %ara eventos de accin pulsar un Button! por e(emplo#

    ItemListener'uando un elemento Checkbox! Choice! etc#! cambiasu estado

    KeyListener)ndican una accin sobre el teclado: pulsar una tecla!soltarla! etc.

    MouseListener)ndican una accin con el ratn que no impliquemovimiento del mismo: hacer clic*! presionar un botn!soltarlo! entrar + salir...

    MouseMotionListener)ndican una accin con el ratn relacionada con sumovimiento: moverlo por una zona determinada! oarrastrar el ratn.

    WindowListener )ndican el estado de una ventana

    'ada uno de estos tipos de evento puede ser producido por diferentes fuentes. %or e(emplo! losActionListenerspueden producirse al pulsar un botn! elegir una opcin de un men&! o pulsar)ntro. Los MouseListenerse producen al pulsar botones del ratn! etc.Toda la gestin de eventos se lleva a cabo desde el paquete java.awt.event.Modos de definir un oyente,upongamos que queremos realizar una accin determinada al pulsar un botn. En este caso!

    tenemos que asociar un ActionListener a un ob(eto Button! e indicar dentro de dichoActionListenerqu- queremos hacer al pulsar el botn. eremos que hay varias formas dehacerlo:1. ue la !ro!ia clase "ue usa el control im!lemente el oyente

    class /i'lase implements ActionListener0 public /i'lase# 0 ... 1utton btn 2 ne3 1utton41oton4#5 btn.addActionListenerthis#5

    ... 6

    public void action%erformedActionEvent e# 0 ++ Aqui va el codigo de la accion 66

    #. $efinir otra clase a!arte "ue im!lemente el oyente class /i'lase0 public /i'lase# 0 ... 1utton btn 2 ne3 1utton41oton4#5

    btn.addActionListenerne3 /i7yente##5 ... 6

    1

  • 7/25/2019 Modelos Eventos Java

    2/21

    Universidad Nacional de Piura F.I.I. E.I.I Programacin II

    _____________________________________________________________________

    6

    class /i7yente implements ActionListener0 public void action%erformedActionEvent e# 0

    ++ Aqui va el codigo de la accion 66

    3. $efinir una instancia interna del oyenteclass /i'lase0 public /i'lase# 0 ... 1utton btn 2 ne3 1utton41oton4#5 btn.addActionListenerne3 ActionListener# 0 public void action%erformedActionEvent e#

    0 ++ Aqui va el codigo de la accion 6 6#5 ... 66

    %so de los &ada!ters&Algunos de los oyentes disponibles como por e(emplo MouseListener, consultad su A%)# tienenvarios m-todos que hay que implementar si queremos definir el oyente. Este traba(o puede serbastante pesado e innecesario si slo queremos usar algunos m-todos. %or e(emplo! si sloqueremos hacer algo al hacer clic* con el ratn! deberemos redefinir el m-todo mouseClicked!

    pero deber8amos escribir tambi-n los m-todos mousePressed, mouseReleased! etc! y de(arlosvac8os.9na solucin a esto es el uso de los adapters. Asociado a cada oyente con m$s de un m-todohay una clase ...Adapterpara MouseListenerest$ MouseAdapter! para WindowListenerest$WindowAdapter! etc#. Estas clases implementan las interfaces con las que se asocian! deforma que se tienen los m-todos implementados por defecto! y slo tendremos quesobreescribir los que queramos modificar.eamos la diferencia con el caso de MouseListener! suponiendo que queremos asociar unevento de ratn a un Panelpara que haga algo al hacer clic* sobre -l.

    1. Mediante Listener'class /i'lase0

    public /i'lase# 0 ... %anel panel 2 ne3 %anel#5 panel.add/ouseListenerne3 /ouseListener# 0 public void mouse'lic*ed/ouseEvent e# 0 ++ Aqui va el codigo de la accion 6

    public void mouseEntered/ouseEvent e# 0

    ++ ... o se necesita 6

    2

  • 7/25/2019 Modelos Eventos Java

    3/21

    Universidad Nacional de Piura F.I.I. E.I.I Programacin II

    _____________________________________________________________________

    public void mouseE"ited/ouseEvent e#

    0 ++ ... o se necesita 6

    public void mouse%ressed/ouseEvent e# 0 ++ ... o se necesita 6

    public void mouse;eleased/ouseEvent e# 0 ++ ... o se necesita 6

    6#5...

    66

    emos que hay que definir todos los m-todos! aunque muchos queden vac8os porque no senecesitan.

    #. Mediante Ada!ter'

    class /i'lase0 public /i'lase# 0 ... %anel panel 2 ne3 %anel#5 panel.add/ouseListenerne3 /ouseAdapter# 0 public void mouse'lic*ed/ouseEvent e# 0 ++ Aqui va el codigo de la accion 6

    6#5...

    66

    emos que aqu8 slo se a

  • 7/25/2019 Modelos Eventos Java

    4/21

    Universidad Nacional de Piura F.I.I. E.I.I Programacin II

    _____________________________________________________________________

    public E(emploAWT>#0

    set,izeBB! >BB#5

    ++ ====== %anel con el contador ======

    ?%anel panel'ont 2 ne3 ?%anel#5final ?Label lbl'ont 2 ne3 ?Label4'ontador:4#5

    lbl'ont.add/ouseListenerne3 /ouseAdapter#0

    ++ Al entrar en la etiqueta hacemos que cambie su te"topublic void mouseEntered/ouseEvent e#0

    lbl'ont.setTe"t4En etiquetaC4#56

    public void mouseE"ited/ouseEvent e#0

    lbl'ont.setTe"t4'ontador:4#56

    6#5t"t'ont 2 ne3 ?Te"t@ield4B4#5panel'ont.addlbl'ont#5panel'ont.addt"t'ont#5

    ++ ====== %anel para el boton ======

    ?%anel panel1oton 2 ne3 ?%anel#5?Label lbl1oton 2 ne3 ?Label4)ncrementar 'ontador:4#5?1utton btn 2 ne3 ?1utton4)ncrementar4#5btn.addActionListenerne3 ActionListener#

    0++ Al pulsar el boton incrementamos en D el contadorpublic void action%erformedActionEvent e#0

    t"t'ont.setTe"t44 )nteger.parse)ntt"t'ont.getTe"t## D##56

    6#5panel1oton.addlbl1oton#5panel1oton.addbtn#5

    ++ ====== %anel para el desplegable ======

    ?%anel panel'hoice 2 ne3 ?%anel#5

    ?Label lbl'hoice 2 ne3 ?Label4Establecer 'ontador:4#5final ?'ombo1o" ch 2 ne3 ?'ombo1o"#5for int i 2 B5 i F DB5 i#

    ch.add)tem44 i#5ch.add)temListenerne3 )temListener#0

    ++ Al elegir una opcion! se asigna ese valor al contadorpublic void item,tate'hanged)temEvent e#0

    t"t'ont.setTe"t,tring#ch.get,elected)tem##56

    6#5panel'hoice.addlbl'hoice#5

    panel'hoice.addch#5

    4

  • 7/25/2019 Modelos Eventos Java

    5/21

    Universidad Nacional de Piura F.I.I. E.I.I Programacin II

    _____________________________________________________________________

    ++ 'olocamos los panelesget'ontent%ane#.addpanel'ont! 4,outh4#5get'ontent%ane#.addpanel1oton! 4West4#5get'ontent%ane#.addpanel'hoice! 4East4#5

    ++ Evento para cerrar la ventanasetGefault'lose7perationEH)TI7I'L7,E#5setisibletrue#5

    6

    public static void main ,tringJK args#0

    ne3 E(emploAWT>#5

    66++===================================================================================================

    E(emplo de iconos y temporizadorimport (ava.a3t.=5import (ava".s3ing.=5import (ava.a3t.event.=5

    += Este e(emplo muestra algunas caracteristicas adicionales de ,3ing como son el uso deiconos! y de timers para un segundero# =+

    public class E(emplo,3ing> e"tends ?@rame0 ?Label lbl'ont5

    public E(emplo,3ing>#

    0set,izeBB! >BB#5get'ontent%ane#.setLayoutne3 MridLayoutD! >##5

    ++ Etiqueta con icono?Label lblEtiq 2 ne3 ?Label4'ontador:4! ne3 )mage)con4cloc*.gif4#!,3ing'onstants.'ETE;#5

    ++ Etiqueta para los segundoslbl'ont 2 ne3 ?Label4B4#5++ Timer: cada segundo incrementa el contadorTimer t 2 ne3 TimerDBBB! ne3 ActionListener#0

    public void action%erformedActionEvent e#0

    lbl'ont.setTe"t44 )nteger.parse)ntlbl'ont.getTe"t## D##56

    6#5t.set;epeatstrue#5t.start#5get'ontent%ane#.addlblEtiq#5get'ontent%ane#.addlbl'ont#5setisibletrue#5

    6public static void main ,tringJK args#0 ne3 E(emplo,3ing>#5

    6

    6

    5

  • 7/25/2019 Modelos Eventos Java

    6/21

    Universidad Nacional de Piura F.I.I. E.I.I Programacin II

    _____________________________________________________________________

    Cmo escribir un Oyente de Key

    Los eventos Ney informan de cu$ndo el usuario ha tecleado algo en el teclado.Espec8ficamente! los evento *ey son generados por el componente que tiene el foco del tecladocuando el usuario pulsa o libera las teclas del teclado. %ara m$s informacin sobre el foco delteclado! puedes ver la p$gina'mo escribir un 7yente de @ocus.#

    ,e pueden notificar dos tipos b$sicos de eventos *ey: la !ulsaci(n de un caracter %nicode) yla !ulsaci(n o li*eraci(n de una tecla del teclado.El primer tipo se llama evento key-typed!y el segundo son eventos key-pressedy key-released.

    En general! slo deber8amos mane(ar los eventos *eyOtyped a menos que necesitemos sabercuando el usuario ha pulsado teclas que no corresponden con caracteres. %or e(emplo! siqueremos saber cuando el usuario teclea alg&n caracter 9nicode OO siempre como resultado deuna pulsacin de tecla como PaP de la pulsacin de una secuencia de teclas OO deber8amosmane(ar eventos *eyOtyped. %or otro lado! si queremos saber cuando el usuario ha pulsado latecla @D! necesitaremos mane(ar eventos *eyOpressed.

    Nota:%ara generar eventos de teclado! un componente debe tener el foco del teclado.

    %ara hacer que un componente obtenga el foco del teclado debemos seguir estos pasos:

    D. Asegurarnos de que el componente puede obtener el foco del teclado. %or e(emplo! enalgunos sistemas las etiquetas no pueden obtenerlo.

    >. Asegurarnos de que el componente pide el foco en el momento apropiado. %aracomponentes personalizados! probablemente necesitaremos implementar un/ouseListener que llame al m-todo request@ocus cuando se pulsa el ratn.

    . ,i estamos escribiendo un componente personalizado! implementaremos el m-todois@ocusTraversable del componente! para que devuelva true cuando el componenteest$ activado. esto permite al usuario usar Tab para ir a nuestro componente.

    M+todos de Evento KeyEl interface NeyListenery su correspondiente clase adaptador! NeyAdapter!contienen tresm-todos:void ,ey-y!edKeyEvent/

    ,e le llama despu-s de que el usuario teclee un caracter 9nicode dentro delcomponente escuchado.

    void ,ey0ressedKeyEvent/,e le llama despu-s de que el usuario pulse una tecla mientras el componenteescuchado tiene el foco.

    void ,eyeleasedKeyEvent/,e le llama despu-s de que el usuario libere una tecla mientras el componenteescuchado tiene el foco.

    Ejem!los de manejo de Eventos KeyEl siguiente applet demuestra los eventos *ey. 'onsiste en un campo de te"to en el quepodemos teclear informacin! seguido de un $rea de te"to que muestra un mensa(e cada vezque el campo de te"to dispara un evento *ey. 9n botn en la parte inferior del applet nospermite borrar tanto el campo como el $rea de te"to.

    Esta es una imagendel GUI del applet.Para ejecutarlo,

    pulsa sobre ella. Elapplet aparecer enuna nueva ventana

    de tu navegador..

    6

    http://ji.ehu.es/LMAlonso/SW/java/Bib/tutorjava/html/ui/swingevents/focuslistener.htmlhttp://ji.ehu.es/LMAlonso/SW/java/Bib/tutorjava/html/ui/swingevents/focuslistener.htmlhttp://java.sun.com/products/jdk/1.1/api/java.awt.event.KeyListener.htmlhttp://java.sun.com/products/jdk/1.1/api/java.awt.event.KeyAdapter.htmlhttp://java.sun.com/products/jdk/1.1/api/java.awt.event.KeyAdapter.htmlhttp://ji.ehu.es/LMAlonso/SW/java/Bib/tutorjava/html/ui/swingevents/KeyEventDemo.htmlhttp://ji.ehu.es/LMAlonso/SW/java/Bib/tutorjava/html/ui/swingevents/focuslistener.htmlhttp://java.sun.com/products/jdk/1.1/api/java.awt.event.KeyListener.htmlhttp://java.sun.com/products/jdk/1.1/api/java.awt.event.KeyAdapter.html
  • 7/25/2019 Modelos Eventos Java

    7/21

    Universidad Nacional de Piura F.I.I. E.I.I Programacin II

    _____________________________________________________________________

    Prueba esto:1. Pulsa sobre el campo de texto del applet para que obtenga el foco.2. Teclea una 'a' minscula pulsando y liberando la tecla A del teclado.

    El campo de texto dispara tres eventos: un key-pressed, un key-typed,y un key-released. Observa que el evento key-typed no tiene

    informacin sobre el cdio de la tecla! los eventos key-typed tampocotienen informacin sobre los modificadores.

    ". Pulsa el botn Clear.#eberias $acer esto despu%s de cada uno de los pasos siuientes.

    &. Pulsa y libera la tecla Sift.El campo de texto dispara dos eventos: un key pressed y un keyreleased. El campo de texto no enera nin'n evento key-typed porque($ift, por s) misma, no corresponde con nin'n car*cter.

    +. Teclea una 'A' mayscula pulsando las teclas Sift y A. er*s los siuientes eventos, aunque qui*s no en este orden: keypressed ($ift/, key pressed 0/, key typed 0/, key released 0/, key

    released ($ift/.. Teclea una 'A' maysculas pulsando y liberando la tecla Caps !oc"# y

    luego pulsando la tecla A.#eber)as ver los siuientes eventos: key pressed 3aps 4ock/, keypressed 0/, key typed 0/, key released 0/. Observa que la tecla 3aps4ock no enera unevento key-released $asta que la pulses y la liberesde nuevo. 4o mismo sucede para otras teclas de estado como (croll4ock y 5um 4ock.

    6. Pulsa y mant$n la tecla A..7(e repite autom*ticamente8 (i es as), ver*s los mismos resultados que

    ver)as si pulsaras y liberaras la tecla 0 repetidamente.

    9uedes encontrar el cdio del applet en eyEvent#emo.;ava. 0qu) puedes verel cdio de mane;o de eventos:

    http://ji.ehu.es/LMAlonso/SW/java/Bib/tutorjava/html/ui/swingevents/example-swing/KeyEventDemo.javahttp://ji.ehu.es/LMAlonso/SW/java/Bib/tutorjava/html/ui/swingevents/example-swing/KeyEventDemo.java
  • 7/25/2019 Modelos Eventos Java

    8/21

    Universidad Nacional de Piura F.I.I. E.I.I Programacin II

    _____________________________________________________________________

    import (ava".s3ing.=5import (ava.a3t.1orderLayout5import (ava.a3t.Gimension5

    import (ava.a3t.event.=5

    public class NeyEventGemo e"tends ?@rame implements NeyListener!ActionListener 0 ?Te"tArea displayArea5 ?Te"t@ield typingArea5 ,tring ne3line5

    public NeyEventGemo# 0?1utton button 2 ne3 ?1utton4'lear4#5button.addActionListenerthis#5

    typingArea 2 ne3 ?Te"t@ield>B#5typingArea.addNeyListenerthis#5

    displayArea 2 ne3 ?Te"tArea#5

    displayArea.setEditablefalse#5?,croll%ane scroll%ane 2 ne3 ?,croll%anedisplayArea#5scroll%ane.set%referred,izene3 GimensionQ! D>##5

    ?%anel content%ane 2 ne3 ?%anel#5content%ane.setLayoutne3 1orderLayout##5content%ane.addtypingArea! 1orderLayout.7;TR#5content%ane.addscroll%ane! 1orderLayout.'ETE;#5content%ane.addbutton! 1orderLayout.,79TR#5set'ontent%anecontent%ane#5

    ne3line 2 ,ystem.get%roperty4line.separator4#5 pac*#5

    setisibletrue#5

    6

    +== Randle the *ey typed event from the te"t field. =+ public void *eyTypedNeyEvent e# 0

    display)nfoe! 4NES TS%EG: 4#5 6

    +== Randle the *ey pressed event from the te"t field. =+ public void *ey%ressedNeyEvent e# 0

    display)nfoe! 4NES %;E,,EG: 4#5 6

    +== Randle the *ey released event from the te"t field. =+ public void *ey;eleasedNeyEvent e# 0

    display)nfoe! 4NES ;ELEA,EG: 4#5 6

    +== Randle the button clic*. =+ public void action%erformedActionEvent e# 0

    ++'lear the te"t components.displayArea.setTe"t44#5typingArea.setTe"t44#5

    ++;eturn the focus to the typing area.

    typingArea.request@ocus#5 6

    !

  • 7/25/2019 Modelos Eventos Java

    9/21

    Universidad Nacional de Piura F.I.I. E.I.I Programacin II

    _____________________________________________________________________

    protected void display)nfoNeyEvent e! ,tring s#0,tring char,tring! *ey'ode,tring! mod,tring! tmp,tring5

    char c 2 e.getNey'har#5int *ey'ode 2 e.getNey'ode#5

    int modifiers 2 e.get/odifiers#5

    if 'haracter.is),7'ontrolc## 0 char,tring 2 4*ey character 2 an unprintable control character#456 else 0 char,tring 2 4*ey character 2 P4 c 4P456

    *ey'ode,tring 2 4*ey code 2 4 *ey'ode 4 4 NeyEvent.getNeyTe"t*ey'ode# 4#45

    mod,tring 2 4modifiers 2 4 modifiers5tmp,tring 2 NeyEvent.getNey/odifiersTe"tmodifiers#5if tmp,tring.length# B# 0 mod,tring 2 4 4 tmp,tring 4#456 else 0 mod,tring 2 4 no modifiers#456

    displayArea.appends ne3line 4 4

    char,tring ne3line 4 4

    *ey'ode,tring

    ne3line 4 4 mod,tring ne3line#5

    6

    public static void main,tringJK s#0 ne3 NeyEventGemo#566

    !a clase %ey&ent

    3ada m%todo de evento key tiene un slo par*metro: un ob;eto %ey&ent. 4a

    clase %ey&entdefine los siuientes m%todos:int get%eyCar()oid set%eyCar(car)

    Obtiene o selecciona el caracter

  • 7/25/2019 Modelos Eventos Java

    10/21

    Universidad Nacional de Piura F.I.I. E.I.I Programacin II

    _____________________________________________________________________

    (elecciona el estado de las teclas modificadoras para este evento.9odemos obtener el estados de las teclas modificadores usando elm%todo get,odifiersde -nput&ent.

    String get%eyText()String get%ey,odifiersText()

    #evuelve una descripcin del cdio de tecla y de la teclamodificadora, respectivamente.

    4a clase %ey&ent$ereda muc$os m%todos de -nput&entyComponent&ent. 4os siuientes m%todos est*n descritos en 4a clase=ouseEvent:

    Component getComponent()oid consume()int geten()boolean isAlt/o0n()boolean isControl/o0n()boolean is,eta/o0n()boolean isSift/o0n()int get,odifiers()

    Cmo escribir un Oyente de MouseLos eventos de /ouse nos cuentan cuando el usuario usa el ratn o un dispositivo de entradasimilar# para interactuar con un componente. Los eventos /ouse ocurren cuando el cursorentra o sale del $rea de pantalla de un componente! o cuando el usuario pulsa o libera el botndel ratn. 'omo seguir la pista del movimiento del ratn significa mas sobrecarga del sistemaque seguir la pista de los eventos de ratn! los eventos mouseOmotion se han separado en otrotipo de oyente puedes ver 'mo escribir un 7yente de /ouse /otion#.M+todos de Eventos MouseEl interface MouseListenery su correspondiente clase adaptadora! MouseAda!ter!contienen

    estos m-todos:void mouse2lic,edMouseEvent/

    Llamado (usto despu-s de que el usuario pulse sobre el componente escuchado.void mouseEnteredMouseEvent/

    Llamado (usto despu-s de que el cursor entre en los l8mites del componenteescuchado.

    void mouseEitedMouseEvent/Llamado (usto despu-s de que el cursor salga de los l8mites del componenteescuchado.

    void mouse0ressedMouseEvent/Llamado (usto despu-s de que el usuario pulse un botn del ratn mientras el cursorest$ sobre el componente escuchado.

    void mouseeleasedMouseEvent/

    Llamado (usto despu-s de que el usuario libere un botn del ratn despu-s de unapulsacin sobre el componente esuchado.

    9na complicacin afecta a los eventos mouseOentered! mouseOe"ited! y mouseOreleased.'uando el usuario arrastra pulsa y mantiene el botn del ratn y luego mueve el ratn#!entonces el componente sobre el que estaba el cursor cuando empez el arrastre es el querecibe todos los subsecuentes eventos de mouse y mouseOmotion incluyendo la liberacin delbotn. Esto significa que ning&n otro componente recibera un slo evento del ratn OO nisiquiera un evento mouseOreleased OO mientras est$ ocurriendo el arrastre.Ejem!los de Manejo de Eventos MouseEl siguiente applet contiene un oyente de mouse. En la parte superior del applet hay un $reavac8a! implementada por una clase llamda 4lan,Area#. El oyente de mouse escucha loseventos del 4lan,Areay de su contenedor! que es un e(emplar de MouseEvent$emo. 'adavez que ocurre un evento de mouse! se muestra un mensa(e descriptivo sobre el $rea blanca.

    /oviendo el cursor sobre el $rea blanca y ocasionalmente pulsado alg&n botn del ratnpodemos generar eventos mouse.

    1#

    http://java.sun.com/products/jdk/1.1/api/java.awt.event.InputEvent.htmlhttp://java.sun.com/products/jdk/1.1/api/java.awt.event.ComponentEvent.htmlhttp://ji.ehu.es/LMAlonso/SW/java/Bib/tutorjava/html/ui/swingevents/mouselistener.html#mouseventhttp://ji.ehu.es/LMAlonso/SW/java/Bib/tutorjava/html/ui/swingevents/mouselistener.html#mouseventhttp://ji.ehu.es/LMAlonso/SW/java/Bib/tutorjava/html/ui/swingevents/mousemotionlistener.htmlhttp://java.sun.com/products/jdk/1.1/api/java.awt.event.MouseListener.htmlhttp://java.sun.com/products/jdk/1.1/api/java.awt.event.MouseListener.htmlhttp://java.sun.com/products/jdk/1.1/api/java.awt.event.MouseAdapter.htmlhttp://java.sun.com/products/jdk/1.1/api/java.awt.event.MouseAdapter.htmlhttp://java.sun.com/products/jdk/1.1/api/java.awt.event.InputEvent.htmlhttp://java.sun.com/products/jdk/1.1/api/java.awt.event.ComponentEvent.htmlhttp://ji.ehu.es/LMAlonso/SW/java/Bib/tutorjava/html/ui/swingevents/mouselistener.html#mouseventhttp://ji.ehu.es/LMAlonso/SW/java/Bib/tutorjava/html/ui/swingevents/mouselistener.html#mouseventhttp://ji.ehu.es/LMAlonso/SW/java/Bib/tutorjava/html/ui/swingevents/mousemotionlistener.htmlhttp://java.sun.com/products/jdk/1.1/api/java.awt.event.MouseListener.htmlhttp://java.sun.com/products/jdk/1.1/api/java.awt.event.MouseAdapter.html
  • 7/25/2019 Modelos Eventos Java

    11/21

    Universidad Nacional de Piura F.I.I. E.I.I Programacin II

    _____________________________________________________________________

    sto es una ima!en del "#$ del Applet% Para e&ecutarlo, pulsa sobre ella% l applet aparecer'en una nue(a (entana de tu na(e!ador%%

    0rue*a esto'D. Mueve el cursor dentro del rect5n6ulo amarillo de la !arte su!erior del a!!let.

    er$s uno o m$s eventos mouseOentered.

    >. 0ulsa y mant+n el *ot(n del rat(n..er$s un evento mouseOpressed. %odr8as ver alg&n evento e"tra como un mouseOe"ited o mouseOentered.

    . Li*era el *ot(n del rat(n.er$s une vento mouseOreleased. ,i no has movido el ratn! seguir$ un evento mouseOclic*ed.

    U. 0ulsa y mant+n el *ot(n del rat(n) y arr5stralo !ara el cursor termine fuera del5rea del a!!let. Li*era el *ot(n del rat(n.er$s un evento mouseOpressed! seguido de un evento mouseOe"ited! seguido por unevento mouseOreleased. 7ose ha notificado el movimiento del cursor. %ara obtenereventos mouseOmotion! necesitamos implementar un oyente de mouseOmotion.

    import (ava".s3ing.=5

    import (ava.a3t.Mrid1agLayout5import (ava.a3t.Mrid1ag'onstraints5import (ava.a3t.)nsets5import (ava.a3t.'olor5import (ava.a3t.Gimension5

    import (ava.a3t.event./ouseListener5import (ava.a3t.event./ouseEvent5

    public class /ouseEventGemo e"tends ?@rame implements /ouseListener 0 1lan*Area blan*Area5 ?Te"tArea te"tArea5 ,tring ne3line5

    public /ouseEventGemo# 0 Mrid1agLayout gridbag 2 ne3 Mrid1agLayout#5 Mrid1ag'onstraints c 2 ne3 Mrid1ag'onstraints#5 ?%anel content%ane 2 ne3 ?%anel#5 content%ane.setLayoutgridbag#5

    c.fill 2 Mrid1ag'onstraints.17TR5 c.grid3idth 2 Mrid1ag'onstraints.;E/A)GE;5 c.3eight" 2 D.B5 c.3eighty 2 D.B5

    c.insets 2 ne3 )nsetsD! D! D! D#5

    blan*Area 2 ne3 1lan*Areane3 'olorB.Vf! B.VQf! B.f##5 gridbag.set'onstraintsblan*Area! c#5

    11

    http://ji.ehu.es/LMAlonso/SW/java/Bib/tutorjava/html/ui/swingevents/mousemotionlistener.htmlhttp://ji.ehu.es/LMAlonso/SW/java/Bib/tutorjava/html/ui/swingevents/mousemotionlistener.htmlhttp://ji.ehu.es/LMAlonso/SW/java/Bib/tutorjava/html/ui/swingevents/MouseEventDemo.htmlhttp://ji.ehu.es/LMAlonso/SW/java/Bib/tutorjava/html/ui/swingevents/mousemotionlistener.html
  • 7/25/2019 Modelos Eventos Java

    12/21

    Universidad Nacional de Piura F.I.I. E.I.I Programacin II

    _____________________________________________________________________

    content%ane.addblan*Area#5

    c.insets 2 ne3 )nsetsB! B! B! B#5 te"tArea 2 ne3 ?Te"tArea#5 te"tArea.setEditablefalse#5 ?,croll%ane scroll%ane 2 ne3 ?,croll%anete"tArea#5

    scroll%ane.set%referred,izene3 Gimension>BB! Q##5 gridbag.set'onstraintsscroll%ane! c#5 content%ane.addscroll%ane#5

    ++;egister for mouse events on blan*Area and applet panel#. blan*Area.add/ouseListenerthis#5 add/ouseListenerthis#5

    ne3line 2 ,ystem.get%roperty4line.separator4#5

    set'ontent%anecontent%ane#5pac*#5setisibletrue#5

    6

    public void mouse%ressed/ouseEvent e# 0 say,omething4/ouse pressed5 X of clic*s: 4 e.get'lic*'ount#! e#5 6

    public void mouse;eleased/ouseEvent e# 0 say,omething4/ouse released5 X of clic*s: 4 e.get'lic*'ount#! e#5 6

    public void mouseEntered/ouseEvent e# 0 say,omething4/ouse entered4! e#5

    6

    public void mouseE"ited/ouseEvent e# 0 say,omething4/ouse e"ited4! e#5 6

    public void mouse'lic*ed/ouseEvent e# 0 say,omething4/ouse clic*ed X of clic*s: 4

    e.get'lic*'ount# 4#4! e#5 6

    void say,omething,tring eventGescription! /ouseEvent e# 0 te"tArea.appendeventGescription 4 detected on 4

    e.get'omponent#.get'lass#.getame# 4.4 ne3line#5 6

    public static void main,tringJK s# 0 ne3 /ouseEventGemo#5 6

    6import (ava".s3ing.=5import (ava.a3t.Gimension5import (ava.a3t.'olor5import (ava.a3t.Mraphics5

    public class 1lan*Area e"tends ?Label 0

    12

  • 7/25/2019 Modelos Eventos Java

    13/21

    Universidad Nacional de Piura F.I.I. E.I.I Programacin II

    _____________________________________________________________________

    Gimension min,ize 2 ne3 GimensionDBB! DBB#5

    public 1lan*Area'olor color# 0set1ac*groundcolor#5set7paquetrue#[email protected]'olor.blac*##5

    6

    public Gimension get/inimum,ize# 0return min,ize5

    6

    public Gimension get%referred,ize# 0return min,ize5

    66%odemos encontrar m$s e(emplos de oyentes de ratn en los siguientes ficheros fuente:

    8im!le2lic,.java 9lass0ane$emo.java

    -a*le8orter.javaAnimatorA!!lication-imer.java

    La 2lase MouseEvent'ada m-todo de evento mouse tiene un slo par$metero: un ob(eto MouseEvent.La claseMouseEventdefine los siguientes m-todos :int 6et2lic,2ount/

    Gevuelve el n&mero de pulsaciones que el usuario ha realizado incluyendo esteevento#.

    int 6et:/int 6et;/0oint 6et0oint/

    Gevuelve la posicin "!y# en la que ocurri el evento! relativa al componente quegener el evento.

    *oolean is0o!u!-ri66er/Gevuelve true si el evento mouse deber8a hacer que apareciera un men& popup. 'omolos disparadores de men&s popup son dependientes de la plataforma! si nuestroprograma los usa! deber8amos llamar a is0o!u!-ri66eren todos los eventos mouseOpressed y mouseOreleased geneados por componentes sobre los que el popup puedaaparecer.

    La clase MouseEventhereda los siguientes m-todos de 2om!onentEvent.2om!onent 6et2om!onent

    Gevuelve el componente que gener el evento. %odemos usar este m-todo en vez de6et8ource.

    La clase MouseEventhereda otros muchos m-todos &tiles deIn!utEvent:void consume/

    Race que el evento no sea procesado por el padre del componente. ,e podr8a usar

    este m-todo para descartar letras tecleadas en un campo de te"to que slo haceptan&meros.

    int 6etW

  • 7/25/2019 Modelos Eventos Java

    14/21

    Universidad Nacional de Piura F.I.I. E.I.I Programacin II

    _____________________________________________________________________

    4%-->7#==MA8K! 4%-->73=MA8K! 2-L=MA8K! ME-A=MA8K! y8?I@-=MA8K. %or e(emplo! la siguiente e"presin es verdadera si se puls el botnderecho:mouseEvent.get/odifiers# Y )nputEvent.19TT7I/A,N#22 )nputEvent.19TT7I/A,NLa clase 8win6%tilitiescontiene m-todos de conveniencia para determinar si se ha

    pulsado un botn particular del ratn:static *oolean isLeftMouse4uttonMouseEvent/static *oolean isMiddleMouse4uttonMouseEvent/static *oolean isLE@-Mouse4uttonMouseEvent/

    import (ava.a3t.=5import (ava.a3t.event.=5import (ava".s3ing.=5

    +== 1ased on Arthur van RoffPs animation e"amples! this application

    = can serve as a template for all animation applications.

    =+public class AnimatorApplicationTimer e"tends ?@rame

    implements ActionListener 0 int frameumber 2 OD5 int delay5 boolean frozen 2 false5 ?Label label5 Timer timer5 ++)s the priority of this thread too highZ ++,ometimes ) canPt interrupt the program easily.

    AnimatorApplicationTimerint fps! ,tring 3indo3Title# 0 super3indo3Title#5 delay 2 fps B# Z DBBB + fps# : DBB5

    ++,et up a timer that calls this ob(ectPs action handler. timer 2 ne3 Timerdelay! this#5 timer.set)nitialGelayB#5 timer.set'oalescetrue#5

    addWindo3Listenerne3 Windo3Adapter# 0 public void 3indo3)conifiedWindo3Event e# 0 stopAnimation#5 6 public void 3indo3GeiconifiedWindo3Event e# 0 startAnimation#5 6

    public void 3indo3'losingWindo3Event e# 0 ,ystem.e"itB#5 6

    6#5

    'ontainer content%ane 2 get'ontent%ane#5 content%ane.add/ouseListenerne3 /ouseAdapter# 0 public void mouse%ressed/ouseEvent e# 0 if frozen# 0 frozen 2 false5 startAnimation#5 6 else 0 frozen 2 true5

    stopAnimation#5 6

    14

    http://java.sun.com/products/jfc/swingdoc-api/javax/api/com.sun.java.swing.SwingUtilities.htmlhttp://java.sun.com/products/jfc/swingdoc-api/javax/api/com.sun.java.swing.SwingUtilities.html
  • 7/25/2019 Modelos Eventos Java

    15/21

    Universidad Nacional de Piura F.I.I. E.I.I Programacin II

    _____________________________________________________________________

    6 6#5

    label 2 ne3 ?Label4@rame 4! ?Label.'ETE;#5 content%ane.addlabel! 1orderLayout.'ETE;#5 6

    public void startAnimation# 0 if frozen# 0 ++Go nothing. The user has requested that 3e ++stop changing the image. 6 else 0 ++,tart or restart# animatingC timer.start#5 6 6

    public void stopAnimation# 0 ++,top the animating thread.

    timer.stop#5 6

    public void action%erformedActionEvent e# 0 ++Advance the animation frame. frameumber5 label.setTe"t4@rame 4 frameumber#5 6

    public static void main,tring argsJK# 0 AnimatorApplicationTimer animator 2 null5 int fps 2 DB5

    ++ Met frames per second from the command line argument if args.length B# 0 try 0 fps 2 )nteger.parse)ntargsJBK#5 6 catch E"ception e# 06 6 animator 2 ne3 AnimatorApplicationTimerfps! 4Animator 3ith Timer4#5 animator.pac*#5 animator.setisibletrue#5 animator.startAnimation#5 66

    Cmo escribir un Oyente de Mouse-MotionLos eventos /ouseOmotion nos dicen cuando el usuario usa el ratn u otro dispositivo similar#para mover el cursor sobre la pantalla.M+todos de Evento MouseMotionEl interface MouseMotionListenery su correspondiente clase adaptador!MouseMotionAda!ter!contienen estos m-todos:void mouse$ra66edMouseEvent/

    Llamado en respuesta a un movimiento del ratn por parte del usuario mientrasmantiene pulsa uno de los botones del ratn. Este evento es disparado por elcomponente que dispar el evento mouseOpressed m$s reciente! incluso si el cursor yano est$ sobre ese componente.

    void mouseMovedMouseEvent/Llamado en respuesta a un movimiento del ratn por parte del usuario sin ning&n botn

    pulsado. El evento es disparado por el evento que se encuentra actualmente deba(o delcursor.

    15

    http://java.sun.com/products/jdk/1.1/api/java.awt.event.MouseMotionListener.htmlhttp://java.sun.com/products/jdk/1.1/api/java.awt.event.MouseMotionListener.htmlhttp://java.sun.com/products/jdk/1.1/api/java.awt.event.MouseMotionAdapter.htmlhttp://java.sun.com/products/jdk/1.1/api/java.awt.event.MouseMotionAdapter.htmlhttp://java.sun.com/products/jdk/1.1/api/java.awt.event.MouseMotionListener.htmlhttp://java.sun.com/products/jdk/1.1/api/java.awt.event.MouseMotionAdapter.html
  • 7/25/2019 Modelos Eventos Java

    16/21

    Universidad Nacional de Piura F.I.I. E.I.I Programacin II

    _____________________________________________________________________

    Ejem!los de Manejo de Eventos MouseMotionEl siguiente applet contiene un oyente de mouseOmotion. Es e"actamente igual que el applet dela p$gina'mo escribir un 7yente de /ouse! e"cepto en que sustituye MouseMotionListenerpor MouseListener! e implementa los m-todo mouse$ra66edy mouseMoveden vez de losm-todo del oyente de mouse. %uedes encontrar el cdigo del applet enMouseMotionEvent$emo.java y en 4lan,Area.java .

    sto es una ima!en del "#$ del Applet% Para e&ecutarlo, pulsa sobre ella% l applet aparecer'en una nue(a (entana de tu na(e!ador%%

    0rue*a esto'D. Mueve el cursor dentro del rect5n6ulo amarillo de la !arte su!erior del a!!let.

    er$s uno o m$s eventos mouseOmoved.>. 0ulsa y mant+n un *ot(n de rat(n y muevelo

  • 7/25/2019 Modelos Eventos Java

    17/21

    Universidad Nacional de Piura F.I.I. E.I.I Programacin II

    _____________________________________________________________________

    6

    void update,ize/ouseEvent e# 0 int " 2 e.getH#5 int y 2 e.getS#5 current;ect.set,ize" O current;ect."!

    y O current;ect.y#5 repaint#5 66M+todos de Eventos usados !or oyentes de MouseMotion'ada evento mouseOmotion tiene un slo par$metro OO y nose llama MouseMotionEventC Ensu lugar cada evento mouseOmotion tiene un m-todo con un argumento MouseEvent. %uedesver la p$gina La clase /ouseEventpara m$s informacin sobre cmo utilizar ob(etosMouseEvent.

    1

    http://ji.ehu.es/LMAlonso/SW/java/Bib/tutorjava/html/ui/swingevents/mouselistener.html#mouseventhttp://ji.ehu.es/LMAlonso/SW/java/Bib/tutorjava/html/ui/swingevents/mouselistener.html#mousevent
  • 7/25/2019 Modelos Eventos Java

    18/21

    Universidad Nacional de Piura F.I.I. E.I.I Programacin II

    _____________________________________________________________________

    &l AP- de Timer

    4as siuiente tablas listan los m%todos y constructores m*s usado de Timer. El09> para usar temporiadores de divide en tres cateor)as:

    0;uste ?ino de la Operacin del @imer

    E;ecutar el @imerEscuc$ar el #isparo del @imer

    $%us&e 'ino de la ()eracin del *imer

    ,$todo o Constructor Propsito

    Timer(int,ActionListener)

    Crea un timer inicializado con un retardo y unoyente. Este es el nico constructor de Timer.

    void setDelay(int)

    int getDelay() Selecciona u obtiene el retardo entre disparos.

    void setInitialDelay(int)

    int getInitialDelay()

    Selecciona u obtiene el retardo para el disparo

    inicial.

    voidsetRepeats(boolean)

    boolean isRepeats()Selecciona u obtiene si el timer se repite.

    void

    setCoalesce(boolean)boolean isCoalesce()

    Selecciona u obtiene su el timer junta variosdisparos pendientes en un nico disparo.

    E%ecu&ar el *imer

    ,$todo Propsito

    void start()void restart() Activa el timer. restartcancela cualquier disparopendiente.

    void stop() Desactiva el timer.

    booleanisRunning() Obtiene si el timer se est ejecutando.

    Escuc+ar el ,is)aro del *imer

    ,$todo Propsito

    void addActionListener(ActionListener)voidremoveActionListener(ActionListener)

    Aade o elimina el oyente deaction.

    &1emplos que usan Timer

    Esta tabla meustra alunos de los e;emplos que usan Timery dnde sedescriben.&1emplo /nde se describe

    ro!ress"arDemo.javaEsta p!ina y C#mo usar $onitorro!ress

    AnimatorApplication%imer.javaEsta p!ina.

    SliderDemo.java C#mo usar Sliders

    1!

    http://ji.ehu.es/LMAlonso/SW/java/Bib/tutorjava/html/ui/swingmisc/timer.html#operation%23operationhttp://ji.ehu.es/LMAlonso/SW/java/Bib/tutorjava/html/ui/swingmisc/timer.html#running%23runninghttp://ji.ehu.es/LMAlonso/SW/java/Bib/tutorjava/html/ui/swingmisc/timer.html#firing%23firinghttp://ji.ehu.es/LMAlonso/SW/java/Bib/tutorjava/html/ui/swingcomponents/example-swing/ProgressBarDemo.javahttp://ji.ehu.es/LMAlonso/SW/java/Bib/tutorjava/html/ui/swingcomponents/progress.htmlhttp://ji.ehu.es/LMAlonso/SW/java/Bib/tutorjava/html/ui/swingcomponents/progress.htmlhttp://ji.ehu.es/LMAlonso/SW/java/Bib/tutorjava/html/ui/swingmisc/example-swing/AnimatorApplicationTimer.javahttp://ji.ehu.es/LMAlonso/SW/java/Bib/tutorjava/html/ui/swingcomponents/example-swing/SliderDemo.javahttp://ji.ehu.es/LMAlonso/SW/java/Bib/tutorjava/html/ui/swingcomponents/slider.htmlhttp://ji.ehu.es/LMAlonso/SW/java/Bib/tutorjava/html/ui/swingmisc/timer.html#operation%23operationhttp://ji.ehu.es/LMAlonso/SW/java/Bib/tutorjava/html/ui/swingmisc/timer.html#running%23runninghttp://ji.ehu.es/LMAlonso/SW/java/Bib/tutorjava/html/ui/swingmisc/timer.html#firing%23firinghttp://ji.ehu.es/LMAlonso/SW/java/Bib/tutorjava/html/ui/swingcomponents/example-swing/ProgressBarDemo.javahttp://ji.ehu.es/LMAlonso/SW/java/Bib/tutorjava/html/ui/swingcomponents/progress.htmlhttp://ji.ehu.es/LMAlonso/SW/java/Bib/tutorjava/html/ui/swingcomponents/progress.htmlhttp://ji.ehu.es/LMAlonso/SW/java/Bib/tutorjava/html/ui/swingmisc/example-swing/AnimatorApplicationTimer.javahttp://ji.ehu.es/LMAlonso/SW/java/Bib/tutorjava/html/ui/swingcomponents/example-swing/SliderDemo.javahttp://ji.ehu.es/LMAlonso/SW/java/Bib/tutorjava/html/ui/swingcomponents/slider.html
  • 7/25/2019 Modelos Eventos Java

    19/21

    Universidad Nacional de Piura F.I.I. E.I.I Programacin II

    _____________________________________________________________________

    Cmo escribir un Oyente de Focus=uc$os componentes --incluso aquellos que operan primariamente con elratn, como los botones -- pueden operar con el teclado. 9area que unapulsacin afecte a un componente, este debe tener el foco del teclado.

    #esde el punto de vista del usuario, el componente que tiene el foco delteclado eneralmente es m*s priminente -- con un borde m*s anc$o que elusual, por e;emplo -- y la ventana que contiene el componente tambi%n esm*s priminente que las otras ventanas de la pantalla. Estos aspectos visualespermiten al usuario conocer a qu% componente le va a teclear. 0l menos uncomponente del sistema de ventanas tiene el foco del teclado.

    4os eventos ?ocus se eneran cuando un componente ana o pierde el focodel teclado. El modo exacto en que los componentes anan o pierden el focodepende del sistema de ventanas. @)picamente, el usuario selecciona el foco

    pulsando una ventana o componente, $aciendo @0A entre componentes, omediante otra forma de interactuar con el componente,

  • 7/25/2019 Modelos Eventos Java

    20/21

    Universidad Nacional de Piura F.I.I. E.I.I Programacin II

    _____________________________________________________________________

    Prueba esto:1. /espliega la entana pulsando el botn superior del applet.

    si es necesario, pulsa sobre la ventana B?ocus Event CindoDB para sucontenido obtena el foco del teclado. eras que aparece un mensa;eB?ocus ainedB en el *rea del applet. 4a forma en que la ventanaobtiene o pierde el foco depende del sistema. 9odemos detectarcuando una ventana ana o pierde el foco implementando un oyente deDindoDy escuc$ando los eventos DindoD activation o deactivation.

    2. Pulsa el botn que ay a la dereca de la entana# y luego pulsa otrocomponente# como un campo de texto.

    Observa que cuando el foco cambia de un componente a otro, el primercomponente enera un evento focus-lost antes de que el seundocomponente enere un evento focus-ained.

    ". -ntenta cambiar el foco pulsao Tab o Sift5Tab.4a mayor)a de los sistemas permiten usan la tecla @ab para circular atrav%s de los componentes que pueden obtener el foco.

    &. ,inimi6a la entana 72ocus &ent indo07.#eber)as ver un mensa;e B?ocus lostB desde el 'ltimo componente quelo ten)a.

    9uedes encontrar el cdio del applet en 2ocus&ent/emo.1aa. 0qu) est* elcdio de mane;o de eventos:

    public class FocusEventDemo ... implements FocusListener ... {

    ...//where initialization occurs

    window = new FocusWindow(this);

    ...

    public void focusained(FocusEvent e) {

    displa!"essa#e($Focus #ained$% e);

    &

    public void focusLost(FocusEvent e) {displa!"essa#e($Focus lost$% e);

    2#

    http://ji.ehu.es/LMAlonso/SW/java/Bib/tutorjava/html/ui/swingevents/windowlistener.htmlhttp://ji.ehu.es/LMAlonso/SW/java/Bib/tutorjava/html/ui/swingevents/windowlistener.htmlhttp://ji.ehu.es/LMAlonso/SW/java/Bib/tutorjava/html/ui/swingevents/example-swing/FocusEventDemo.javahttp://ji.ehu.es/LMAlonso/SW/java/Bib/tutorjava/html/ui/swingevents/windowlistener.htmlhttp://ji.ehu.es/LMAlonso/SW/java/Bib/tutorjava/html/ui/swingevents/windowlistener.htmlhttp://ji.ehu.es/LMAlonso/SW/java/Bib/tutorjava/html/ui/swingevents/example-swing/FocusEventDemo.java
  • 7/25/2019 Modelos Eventos Java

    21/21

    Universidad Nacional de Piura F.I.I. E.I.I Programacin II

    _____________________________________________________________________

    &

    void displa!"essa#e('trin# prefi% FocusEvent e) {

    displa!.append(prefi

    $* $

    e.#et+omponent()

    newline);&

    ...

    &

    class FocusWindow etends ,Frame {

    ...

    public FocusWindow(FocusListener listener) {

    super($Focus Demo Window$);

    this.addFocusListener(listener);

    ...

    ,Label label = new ,Label($- Label$);

    label.addFocusListener(listener);

    ...

    ,+omboo choice = new ,+omboo(/0 list of items0/);

    ...

    choice.addFocusListener(listener);

    ...

    ,utton button = new ,utton($- utton$);

    button.addFocusListener(listener);

    ...

    ,List list = new ,List(/0 list of items0/);

    ...

    list.addFocusListener(listener);

    &

    &

    !a clase 2ocus&ent

    3ada m%todo de evento focus tiene un slo par*metro: un ob;eto 2ocus&ent,4a clase 2ocus&entdefine el siuiente m%todo:boolean isTemporary()

    #evuelve true si la p%rdida del foco es temporal. 5ecesitaremos utiliareste m%todo si estamos implementando un componente que puedaindicar que obtendr* el foco cuando la ventana lo vuelva a obtener.

    El m%todo getComponent, que 2ocus&ent$ereda de Component&ent,devuelve el componente que enero el evento de focus

    21

    http://java.sun.com/products/jdk/1.1/api/java.awt.event.FocusEvent.htmlhttp://java.sun.com/products/jdk/1.1/api/java.awt.event.ComponentEvent.htmlhttp://java.sun.com/products/jdk/1.1/api/java.awt.event.FocusEvent.htmlhttp://java.sun.com/products/jdk/1.1/api/java.awt.event.ComponentEvent.html