Вы находитесь на странице: 1из 18

PROGRAMACIN I

P R O G R A M A C I N O R I E N TA D A A OBJETOS: HERENCIA, REDEFINICIN


DE MTODOS Y EVENTOS DE LA I N T E R FA Z G R F I C A .

Introduccin
Con los programas incluidos en este proyecto se pretende mostrar la utilidad de algunos conceptos de Programacin Orientada a Objetos, as como aspectos relacionados con la programacin de interfaces grficas en java. Simplificando, puede decirse que el primer paso para dotar a una aplicacin de una interfa grfica es la creacin de un objeto de la clase! javax.swing.JFrame "se objeto es, en definitiva, el responsable de dibujar en la pantalla una ventana, que puede incluir, adems, cosas como botones, barras de men#, campos de te$to, imgenes% &odas ellas son la representacin grfica de objetos creados por la aplicacin, y que 'an sido pegados o situados en el correspondiente JFrame. (unque cada uno de esos objetos pertene ca a una clase distinta, desde el punto de vista de dic'o JFrame, todos son instancias de la misma clase! java.awt.Component "sto es debido a que todos ellos son instancias de alguna subclase de Component) en lo que sigue, nos referiremos a ellos como componentes grficos o simplemente componentes. ( continuacin se muestra la ventana que aparece al ejecutarse el programa VentanaConComponentes. (unque no revisaremos su cdigo, s observaremos que en esa ventana aparecen dibujados componentes de las clases siguientes! javax.swing.JLabel javax.swing.JTextField javax.swing.JButton javax.swing.JEditorPane *a librera estndar de java incluye muc'os ms.

JLabel JTextField

JButton

C mo se !rea una ventana !on !omponentes"


"l programa Ventana#al$rgani%ada muestra cmo puedes organi ar cdigo de una aplicacin con una interfa grfica sencilla! +. defines una subclase de JFrame ,sando Eclipse es muy simple! pinc'as en File & 'ew & Class en el formulario siguiente! el

Pinc'as en el botn Browse y se desplegar un nuevo formulario para elegir la clase que quieres e$tender -la super!lase.

"n el campo de te$to que aparece en la parte superior del formulario, escribe JFrame y pinc'a $() tambi/n puedes escribir solamente unas pocas letras del nombre de la superclase y seleccionarla en la lista de clases que aparece en la parte inferior. 0. ,na ve que Eclipse 'aya generado el esqueleto de la nueva clase, incluyes en ella las variables correspondientes a los componentes que vayas a incluir en la ventana, y los creas) por ejemplo! private 12utton operar2utton 3 new 12utton-45o it4.) private 12utton fin2utton 3 new 12utton-46in4.) 7. Para arrancar la ejecucin de la aplicacin, simplemente incluyes una funcin as! publi! stati! void main-String args89. : ;entana<al=ec'a v 3 new ;entana<al=ec'a-.) v.set5efaultCloseOperation-16rame.EXIT_ON_CLOSE.) v.set;isible-true.) > 5e esta forma, la aplicacin arranca creando y 'aciendo visible una ventana de la nueva clase. 5espu/s de completar los puntos anteriores, tendrs un programa parecido a Ventana#al)e!*a. Si lo ejecutas vers una ventana como la siguiente!

(unque se 'a creado una instancia de Ventana#al)e!*a, que a su ve contiene varios componentes de diferentes clases, en la ventana dibujada en la pantalla no se ve nada. Para que un componente aparezca dibujado dentro de una ventana, debe ser incluido o pegado en la misma. "so puede 'acerse usando el m/todo! publi! void add+java.awt.Component !,disponible en la clase JFrame, y por lo tanto, tambi/n en Ventana#al)e!*a es una subclase suya. *a clase Ventana#al$rgani%ada es otra versin de la anterior, y muestra cmo usar ese m/todo para pegar los componentes deseados en la ventana. Para ello se define una constructora con las instrucciones oportunas! publi! ;entana<alOrgani ada-.: add-operar2utton.) add-fin2utton.) add-fileC'ooser.) add-colorC'ooser.) > En una ventana se puede pegar cualquier instancia de java.awt.Component. (?adir componentes a una ventana usando el m/todo add, presenta algunas dificultades. Por ejemplo, al ejecutarse Ventana#al$rgani%ada aparece la ventana siguiente!

(unque se 'an incluido varios componentes en la ventana, solamente aparece dibujado el a?adido en #ltimo lugar.

C mo se puede !onseguir .ue en una ventana se dibujen los !omponentes a/adidos"

*as instancias de JFrame tienen ms m/todos para a?adir componentes a una ventana, aparte del citado arriba. Sin embargo, conseguir que esos elementos se dibujen! de manera que se vean con unas dimensiones ra onables agradablemente distribuidos en el espacio de la ventana, incluso cuando se cambian las dimensiones la ventana puede ser bastante laborioso, si se 'ace a pelo. "n situaciones sencillas, cuando no sea necesario organi ar una interfa grfica muy sofisticada, podemos evitar esas dificultades imaginando que el espacio de una ventana est dividido en zonas como se indica en la figura siguiente!

North West East

Center

South
"n cada una de las cinco onas referidas se puede situar un java.awt.Component usando el m/todo siguiente de la clase JFrame! publi! void add+0tring nombre1e%ona2 java.awt.Component !,"se m/todo se usa en la clase Ventana0inPaneles para colocar varios componentes en las onas referidas! publi! ;entanaSinPaneles-.: add-4@ort'4, operar2utton.) AB B Si se cambia 4@ort'4 por B 4@OC&=4 4nort'4... B petaD BA add-4Sout'4, fin2utton.) add-4Center4, colorC'ooser.) add-4Center4, fileC'ooser.) >

(unque se 'an situado dos componentes en la ese programa vers la ventana siguiente!

ona central, al ejecutar

E puedes comprobar que! *os botones se ven demasiado grandes Si pones dos componentes en la misma

ona solo se ve el #ltimo

0ituar elementos usando paneles


*os defectos que tiene Ventana0inPaneles pueden resolverse, al menos para problemas sencillos, usando componentes grficos de la clase javax.swing.JPanel ,n objeto de esa clase representa una especie de panel de corcho en el cual pueden pegarse botones, etc. Para ello puede usarse el m/todo de la clase JPanel publi! void add+java.awt.Component !,Si revisas el cdigo de VentanaConPaneles vers que esa clase! declara cinco variables de tipo JPanel! private 1Panel panel@orte) private 1Panel panelSur) private 1Panel panel"ste) private 1Panel panelOeste) al construirse cada VentanaConPaneles se crean cinco paneles, se colocan en las onas de la ventana referidas arriba, y se distribuyen los dems componentes de la ventana en esos paneles! publi! ;entanaConPaneles-.: panel@orte 3 new 1Panel-.) panelCentro 3 new 1Panel-.) panelSur 3 new 1Panel-.) panel"ste 3 new 1Panel-.) panelOeste 3 new 1Panel-.) add-4@ort'4, panel@orte.) add-4Center4, panelCentro.) add-4Sout'4, panelSur.) add-4"ast4, panel"ste.) add-4Fest4, panelOeste.) panel@orte.add-operar2utton.) panel@orte.add-fin2utton.) panelCentro.add-colorC'ooser.) panelSur.add-fileC'ooser.) > (l ejecutarse VentanaConPaneles vers una ventana como la siguiente!

Como ves, tiene una apariencia algo ms ra onable que las versiones anteriores. ,sando paneles de esta manera puedes usar los paneles norte y sur para colocar componentes cuya representacin grfica requiere por lo general menos espacio, como botones, campos de te$to, etiquetas) el panel central puedes reservarlo para alojar un componente cuya representacin grfica requiera mayor espacio.

Puedo de3inir mis propios !omponentes"


(l ejecutar el programa VentanaConTablero0imple vers una ventana como la siguiente!

Como puedes comprobar inspeccionando su cdigo, cada instancia de VentanaConTablero0imple contiene un #nico componente, de la clase JTablero0imple, incluida tambi/n en este proyecto. &ambi/n podrs comprobar que! JTablero0imple es una subclase de java.awt.Component "n JTablero0imple 'ay un m/todo con la cabecera siguiente! publi! void paint+4rap*i!s g, @i en VentanaConTablero0imple ni en JTablero0imple se 'ace uso de ese m/todo, por lo que podras pensar que no sirve para nada. Sin embargo, si comentas las instrucciones del m/todo citado, de manera que no 'aga absolutamente nada, al ejecutar el programa VentanaConTablero0imple vers la ventana siguiente!

"st claro que a'ora VentanaConTablero0imple e$'ibe un comportamiento bastante distinto Gpor qu/ ocurre eso si el m/todo paint parece in#tilH 2sicamente, cuando una ventana se 'ace visible, el JFrame correspondiente se encarga de solicitar a cada uno de los componentes que 'an sido pegados en /l que 'agan su propio dibujo, como se representa grficamente en la figura siguiente!

:JFrame

:JButton : JButton : :JButton JTableroSimpl e

paint( )

*o que esa figura quiere representar es que el objeto JFrame 'ace una llamada a cierto m/todo de cada componente) ese m/todo tiene la cabecera siguiente! publi! void paint+4rap*i!s g, GPor qu/ puede actuar as un JFrameH *a ra n es muy sencilla. Ocurre que todos los componentes pegados a un JFrame deben ser, en definitiva, instancias de java.awt.Component, y esa clase incluye el m/todo referido, que es 'eredado por sus subclases. Por lo tanto, cuando un JFrame se 'ace visible, tambi/n conoce que los componentes que tiene pegados disponen de ese m/todo, aunque ignore cul es la clase concreta de cada componente. GE por qu/ cada componente se dibuja de una manera distintaH (unque todos los componentes reciben el mismo mensaje -es decir, paint. lo

que ocurre es que ese m/todo est definido de forma distinta en cada clase de componente. Por ese motivo, cuando un JTablero0imple recibe ese mensaje, no se ejecuta el bloque de instrucciones de la clase Component, sino el incluido en JTablero0imple. Como puede verse, gracias a los mecanismos de 'erencia, redefinicin de m/todos y ligadura dinmica, podemos definir componentes con la representacin grfica que deseemos! basta con incluir en el m/todo paint las instrucciones adecuadas. Cecuerda que la cabecera del m/todo paint en la clase Component es! publi! void paint+4rap*i!s g, "l objeto 4rap*i!s que un componente recibe como parmetro es una 'erramienta que permite dibujar lneas, rectngulos, te$tos, etc. Por ejemplo, para que se dibuje el te$to I=olaJ en las coordenadas +K, 0K de un componente basta con incluir en el m/todo paint la instruccin siguiente! g.draw0tring+5)ola62 782 98,"n este sentido, 'ay que tener en cuenta que el sistema de coordenadas utili ado en java es algo distinto del 'abitual, ya que el origen se considera situado en el v/rtice superior i quierdo del dibujo del componente correspondiente!

C mo *ago para .ue mi programa *aga lo .ue me interesa !uando se pin!*a un bot n situado en su ventana"
5efinir una clase de ventanas en las cuales apare ca un #nico botn es muy fcil, como puedes ver revisando la clase VentanaConJButton. @aturalmente, al ejecutarse la funcin main de esa clase aparecer una ventana como la siguiente!

Sin embargo, si pinc'as en el botn =ola, podrs comprobar que eso no tiene ning#n efecto. Cuando un usuario pinc'a en alguno de los botones dibujados en la ventana de un programa, decimos que se produce un evento de la inter3a% gr:3i!a. Claro que pinc'ar el botn no es lo #nico que el usuario puede 'acer con los elementos de una ventana. &ambi/n 'ay otros tipos eventos que pueden producirse! el usuario puede despla ar el puntero del ratn dentro o fuere del botn, puede clicar alguno de los botones del ratn, etc. Sin entrar en muc'os detalles, cuando se arranca una aplicacin grfica en java, se desarrollan en paralelo dos procesos o actividades distintas! 5e una parte, la ejecucin de las instrucciones incluidas en la funcin main

5e otra parte, en cuanto una ventana se 'ace visible, la deteccin de las acciones del usuario "n principio, la segunda actividad no termina nunca, y se denomina t read awt o t read de la interfaz grfica. (dems, esa actividad no se reduce a la mera deteccin de eventos sino que, adems, cuando se produce un evento, tambi/n se enva un mensaje a alguno de los objetos creados por la aplicacin. Por ejemplo, al pinc'ar el botn )ola en la ventana anterior, se produce una llamada al m/todo! void pro!essEvent+;<TEvent e, que posee el JButton correspondiente, aunque ese m/todo no 'ace nada. ,na manera obsoleta de conseguir que al ejecutarse VentanaConJButton se 'aga algo, como escribir un mensaje, por ejemplo, es! +. 5efines una subclase de JButton "sto es sencillo usando "clipse. 0. Cedefines el m/todo anterior ,na ve que se 'a creado el esqueleto bsico de la clase, puedes servirte de E!lipse 'aciendo lo siguiente! Pinc'as en 0our!e & $verride=>mplement met*ods Se desplegar el formulario siguiente!

2usca el m/todo que quieres redefinir! est en la clase java.awt.Container Seleccionas ese m/todo y pinc'as $( E!lipse generar el cdigo siguiente

LOverride prote!ted void process"vent-(F&"vent e. : AA T$1$ (utoMgenerated met'od stub super.process"vent-e.) > 7. Cambias en ese m/todo el cdigo que 'a generado E!lipse por las instrucciones oportunas) por ejemplo! System.out.println-4=ola4.) N. Cambias la funcin main que usaste arriba de manera que se cree un botn de la nueva clase, como puedes ver en )olaJButton? 12utton b 3 neO =ola12utton-.) ('ora, cuando el usuario pinc'e en el botn, en el t'read de la interfa grfica se producir una llamada al m/todo process"vent del botn) eso 'ar que se ejecute el m/todo que acabas de definir y no el que est definido en la clase JButton. Por desgracia, ese m/todo se ejecuta no slo cuando se pinc'a el botn, que es que deseamos en este caso, sino tambi/n en otras circunstancias. Por ejemplo, cuando el usuario mueve el puntero

del ratn y lo sit#a en el interior del botn) en la clase )olaJButton puedes ver una versin ms adecuada del m/todo anterior.

C mo *ago para .ue mi programa *aga lo .ue me interesa !uando se pin!*a un bot n de su ventana2 sin definir nuevas clases de botones"

*a manera anterior de definir la respuesta a los eventos de la interfa grfica es un bonito ejemplo de la utilidad de los mecanismos de 'erencia y ligadura dinmica. Sin embargo, no es tan adecuada en la prctica. Por eso, es preferible 'acer las cosas de otra manera, que puede parecer ms compleja pero que es muy sencilla si se usa E!lipse. *a clase VentanaConJButton@Event)andler te muestra un ejemplo. &odo se reduce a incluir en la constructora el cdigo siguiente! 'ola2utton.add(ction*istener-new (ction*istener-.: publi! void actionPerformed-(ction"vent e. : AB "jecutado cuando se pinc'a el boton BA >

>.) > 2sicamente, con ese cdigo estamos creando un objeto ;!tionListener2 de manera que cuando el usuario pinc'e en el botn 'ola2utton, el t'read de la interfa grfica ejecute el m/todo actionPerformed de ese objeto. *a figura siguiente representa grficamente este proceso!

"n general, si quieres que se ejecute el m/todo mA#et*od cuando se pic'e el botn asignado a la variable mAVar debes incluir este cdigo! mAVar.add!ction"istener#new !ction"istener#$ % public void actionPerformed#!ctionEvent e$ % AB B (qui se pone el nombre del metodo que B queremos ejecutar cuando se pinc'a el boton my;ar BA mA#et*od-.) & &$' "s importante no alterar el cdigo escrito en negrita. "clipse es una gran ayuda para lograrlo. Por ejemplo, para incluir ese cdigo en VentanaConJButton@Event)andler, 'aremos lo siguiente! +. "n la #ltima lnea de la constructora escribe!

*olaButton. 0. Pulsa CTLB0P;CE y se desplegar un men# como el siguiente

7. Selecciona siguiente!

la

opcin

add;!tionListener

E!lipse

generar

lo

*olaButton.add;!tionListener+l, N. (?ade un - al final! *olaButton.add;!tionListener+l,P. Sustituye la l entre par/ntesis por! new y pulsa CTLB0P;CE. Selecciona la opcin ;!tionListener en el men# desplegado, y se generar lo siguiente! *olaButton.add;!tionListener+new ;!tionListener,Q. Compl/talo as! *olaButton.add;!tionListener+new ;!tionListener+,CD,R. Pinc'a en la marca de error y aparecer!

S. Selecciona la opcin ;dd unimplemented met*ods y se generar! 'ola2utton.add(ction*istener-new (ction*istener-.: publi! void actionPerformed-(ction"vent e. : AA T$1$ (utoMgenerated met'od stub >>.) T. ('ora solo falta que incluyas las instrucciones oportunas en el m/todo ;!tionPer3ormed Si el cdigo de ese m/todo e$cede de un par de lneas, puede ser recomendable definir un m/todo au$iliar y dejar reducido el cdigo anterior al mnimo imprescindible) por ejemplo! 'ola2utton.add(ction*istener-new (ction*istener-.: publi! void actionPerformed-(ction"vent e. : 'ola2utton(ctionPerformed-.) >>.)

C mo *ago para .ue mi programa *aga lo .ue me interesa !uando se mueve el puntero"

5e nuevo, todo se reduce a crear un objeto de la clase apropiada, como puedes ver en la clase VentanaConTablero0imple@#ouse#otionListener "sa clase es casi igual que VentanaConTablero0imple, solo que se incluye en la constructora el cdigo siguiente!

tablero.add<ouse<otion*istener-new <ouse<otion*istener-.: publi! void mouse5ragged-<ouse"vent e. : AB Cuando se arrastra el puntero del ratn BA > publi! void mouse<oved-<ouse"vent e. : AB Cuando se mueve el puntero del ratn BA >>.)

> Con ese cdigo estamos creando un objeto #ouse#otionListener2 de manera que cuando el usuario mueva el puntero del ratn sobre el tablero referido, el t'read de la interfa grfica ejecute el m/todo mouse#oved. (nlogamente, cuando el usuario mueva el puntero del ratn sobre el tablero referido, el t'read de la interfa grfica ejecutar el m/todo mouse1ragged. Para evitar errores en la escritura de ese cdigo conviene dejarse ayudar por "clipse. Para incluir eso en la clase VentanaConTablero0imple, por ejemplo, 'ay que 'acer lo siguiente! +. "n la #ltima lnea de la constructora escribe! tablero. 0. Pulsa CTLB0P;CE y se desplegar un men# como el siguiente

Selecciona siguiente!

la

opcin

add#ouse#otionListener

"clipse

generar

lo

tablero.add#ouse#otionListener+l, 7. (?ade un - al final y sustituye la l entre par/ntesis por! new N. Pulsa CTLB0P;CE y se desplegar un men#! selecciona la opcin #ouse#otionListener y se generar lo siguiente! *olaButton.add;!tionListener+new #ouse#otionListener,P. Compl/talo as! *olaButton.add;!tionListener+new #ouse#otionListener +,CD,Q. Pinc'a en la marca de error y aparecer!

R. Selecciona la opcin ;dd unimplemented met*ods y "clipse generar! tablero.add<ouse<otion*istener-new <ouse<otion*istener-.: publi! void mouse5ragged-<ouse"vent e. : AA T$1$ (utoMgenerated met'od stub > publi! void mouse<oved-<ouse"vent e. : AA T$1$ (utoMgenerated met'od stub

>>.) S. ('ora solo falta que incluyas las instrucciones oportunas en los m/todos anteriores. @aturalmente, si el programa solamente debe responder a los movimientos del puntero, no es necesario que se incluya ninguna instruccin en mouse1ragged. E anlogamente, si solamente debe responder a los arrastres del puntero, no es necesario que se incluya ninguna instruccin en mouse#oved. (dems, tambi/n conviene tener en cuenta lo dic'o antes referido a un botn, y reducir el cdigo de esos m/todos al mnimo imprescindible. "so puede 'acer necesario incluir nuevos m/todos en la clase de componente involucrada) en nuestro caso, en la clase JTablero0imple. ( continuacin vemos un ejemplo. (l ejecutar el programa VentanaConTablero vers una ventana como la siguiente!

(dems, el crculo rojo va cambiando su posicin a trav/s del tablero y cambindose por una imagen o por un te$to. VentanaConTablero y VentanaConTablero0imple son muy parecidos. Se 'a cambiado! private 1&ableroSimple tablero 3 new 1&ableroSimple-.) por private 1&ablero tablero 3 new 1&ablero-.) ,n JTablero es un tipo particular de tablero, con algunas capacidades e$tras, que son usadas en el m/todo test de VentanaConTablero. 2revemente, las nuevas posibilidades que ofrece un JTablero nos permiten! situar un cursor en una posicin cualquiera) para ello, la clase incluye el m/todo siguiente! publi! void setCursor;t+int x2 int A,Cuando se dibuja el tablero, se dibuja tambi/n el cursor en el punto en que se encuentre situado. cambiar la representacin grfica del cursor! publi! void setCursor0tAle+int !odigo1eEstilo,Cuando se dibuja el tablero, se dibuja el cursor con el estilo correspondiente al cdigo elegido, bien como un crculo, bien como una figura, o bien como un te$to.

naturalmente, cuando, se dibuja el tablero tambi/n debe dibujarse el cursor con el estilo adecuado, en su caso) por ese motivo las instrucciones incluidas en! publi! void paint+4rap*i!s g,se 'an adaptado conforme a lo dic'o. ,na ve que tenemos a nuestra disposicin este nuevo tipo de tablero, resulta sencillo escribir un programa que sea capa de seguir los movimientos del puntero dibujando un crculo cuando se mueve el puntero normalmente y una figura cuando se arrastra. "l programa VentanaConTablero@#ouse#otionListener muestra la solucin) los m/todos mouse1ragged y mouse1ragged se traducen en un par de llamadas a m/todos del nuevo tipo de tablero.

C mo *ago para .ue mi programa *aga lo .ue me interesa !uando se *a!e !li! dentro de un tablero"

Como seguramente esperas ya, debemos crear un objeto con ciertas caractersticas. Cuando el puntero del ratn se encuentre situado en el interior de nuestro tablero, y el usuario 'aga clic en el botn del ratn, en el t read de la interfaz grfica se ejecutar cierto m/todo de ese objeto. Para incluir el cdigo correspondiente en la clase VentanaConTablero por ejemplo, 'ay que 'acer lo siguiente! +. "n la #ltima lnea de la constructora escribe! tablero. 0. Pulsa CTLB0P;CE y se desplegar un men# como el siguiente

7. Selecciona siguiente!

la

opcin

add#ouseListener

"clipse

generar

lo

tablero. add#ouseListener +l, N. (?ade un - al final y sustituye la l entre par/ntesis por! new P. Pulsa CTLB0P;CE y se desplegar un men#! selecciona la #ouseListener y se generar lo siguiente! tablero.add#ouseListener+new #ouseListener,Q. Compl/talo as! *olaButton.add;!tionListener+new #ouseListener +,CD,R. Pinc'a en la marca de error y aparecer!

opcin

S. Selecciona la opcin ;dd unimplemented met*ods y "clipse generar! tablero. add<ouse*istener-new <ouse*istener -.: publi! void mouseClicUed-<ouse"vent e. : AB Cuando se 'ace clic BA >

publi! void mouse"ntered-<ouse"vent e. : AB Cuando el puntero entra en el tablero BA > publi! void mouse"$ited-<ouse"vent e. : AB Cuando el puntero sale del tablero BA > publi! void mousePressed-<ouse"vent e. : AB Cuando se 'ace aprieta el raton BA > publi! void mouseCeleased-<ouse"vent e. : AB Cuando se suelta el raton BA >>.) T. ('ora solo falta que incluyas las instrucciones oportunas en los m/todos anteriores.

C mo *ago para .ue mi programa *aga lo .ue me interesa !uando se pulsa una te!la"
Para incluir el cdigo correspondiente en la clase VentanaConTablero por ejemplo, 'ay que 'acer lo siguiente! +. "n la #ltima lnea de la constructora escribe! tablero. 0. Pulsa CTLB0P;CE y se desplegar un men# como el siguiente

7. Selecciona siguiente!

la

opcin

add(eAListener

"clipse

generar

lo

tablero. add(eAListener +l, N. (?ade un - al final y sustituye la l entre par/ntesis por! new P. Pulsa CTLB0P;CE y se desplegar un men#! selecciona la opcin (eAListener y se generar lo siguiente! tablero.add(eAListener+new (eAListener,Q. Compl/talo as! tablero.add(eAListener+new (eAListener +,CD,R. Pinc'a en la marca de error y selecciona la opcin ;dd unimplemented met*ods) "clipse generar! tablero. addVey*istener-new Vey*istener -.: publi! void UeyPressed-Vey"vent e. : AA T$1$ (utoMgenerated met'od stub > publi! void UeyCeleased-Vey"vent e. : AA T$1$ (utoMgenerated met'od stub

> publi! void Uey&yped-Vey"vent e. : AA T$1$ (utoMgenerated met'od stub > S. Wenera el cdigo de respuesta a las acciones del ratn siguiendo las intrucciones indicadas ms arriba! tablero.add<ouse*istener-new <ouse*istener-.: publi! void mouseClicUed-<ouse"vent e. : AA T$1$ (utoMgenerated met'od stub > publi! void mouse"ntered-<ouse"vent e. : AA T$1$ (utoMgenerated met'od stub > publi! void mouse"$ited-<ouse"vent e. : AA T$1$ (utoMgenerated met'od stub > publi! void mousePressed-<ouse"vent e. : AA T$1$ (utoMgenerated met'od stub > publi! void mouseCeleased-<ouse"vent e. : AA T$1$ (utoMgenerated met'od stub >>.) T. 5efine el m/todo mouseEntered como sigue! publi! void mouse"ntered-<ouse"vent e. : tablero.request6ocusXnFindoO-.) > +K. ('ora solo falta que incluyas las instrucciones oportunas en los m/todos EeAPressed, EeAFeleased2 y EeATAped. "n este sentido, conviene tener en cuenta que! EeATAped se ejecuta cuando el usuario teclea un carcter EeAPressed se ejecuta cuando el usuario aprieta una tecla cualquiera! Y, F, ", pero tambi/n CO@&CO*, "@&"C, etc EeAFeleased se ejecuta cuando el usuario suelta una tecla apretada anteriormente (dems, al ejecutarse esos m/todos se recibe como parmetro un objeto (eAEvent con informacin referente a la tecla correspondiente al evento procesado. "n el programa VentanaCon(eAListener Puedes ver cmo se definen los m/todos EeAPressed y EeATAped de manera que se escriba un mensaje indicando el carcter y el cdigo num/rico de la tecla involucrada en cada caso.

Вам также может понравиться