Vous êtes sur la page 1sur 60

Unidad 11.

Componentes de la GUI: Parte Uno


11.1 Introduccin Una interfaz grfica de usuario (GUI) presenta un mecanismo amigable al usuario para interactuar con una
aplicacin. Una GUI proporciona a una aplicacin una apariencia visual nica. Al proporcionar distintas aplicaciones en las ue los componentes de la interfaz de usuario sean consistentes e intuitivos! los usuarios pueden familiarizarse en cierto modo con una aplicacin! de manera ue pueden aprender a utilizarla en menor tiempo " con ma"or productividad. #as GUIs se crean a partir de componentes de GUI$ a %stos se les conoce algunas veces como controles o widgets.

11.2 Entrada/salida simple basada en GUI con !ptionPane #a ma"or&a de las aplicaciones utilizan ventanas o cuadros de dilogo (tambi%n conocidos como dilogos'
para interactuar con el usuario. #a clase !ptionPane de (ava (pa uete "a#a$.swing' proporciona cuadros de dilogo preempa%uetados para entrada " salida. )l m%todo static s&owInput'ialog de !ptionPane muestra un dilogo de entrada. *or lo general! un indicador utiliza la capitalizacin estilo oracin+ un estilo ue capitaliza slo la primera letra de la primera palabra en el te,to! a menos ue la palabra sea un nombre propio. Un dilogo de entrada slo puede introducir ob-etos (tring. )sto es comn en la ma"or&a de los componentes de la GUI. )l m%todo static s&ow)essage'ialog de !ptionPane muestra un dilogo de mensa-e.
// *ig. 11.2: (uma."a#a Programa de suma %ue utili+a a !ptionPane para entrada , salida. import -ava,.s.ing.(/ption*ane$ 00 el programa usa (/ption*ane public class (uma public static #oid main. (tring args/0 ) 00 obtiene la entrada del usuario de los dilogos de entrada de (/ption*ane 1tring primer2umero 3 (/ption*ane.s4o.Input5ialog( 6Introduzca el primer entero6 '$ 1tring segundo2umero 3 (/ption*ane.s4o.Input5ialog( 6Introduzca el segundo entero6 '$ 00 convierte las entradas 1tring en valores int para usarlos en un clculo int numero7 3 Integer.parseInt( primer2umero '$ int numero8 3 Integer.parseInt( segundo2umero '$ int suma 3 numero7 9 numero8$ 00 suma nmeros 00 muestra los resultados en un dilogo de mensa-es de (/ption*ane (/ption*ane.s4o.:essage5ialog( null! 6#a suma es 6 9 suma! 61uma de dos enteros6! (/ption*ane.*#AI2;:)11AG) '$ < 00 fin del m%todo main < 00 fin de la clase 1uma

Figura 11.3 | Constantes static de JOptionPane para dilogos de mensaje.

11.1 Generalidades de los componentes de (wing #a ma"or&a de los componentes de GUI de 1.ing se encuentran en el pa uete "a#a$.swing. =orman parte de
las a#a *oundation Classes ( *C'+ las bibliotecas de (ava para el desarrollo de GUIs en distintas plataformas. )n con-unto! a la apariencia " la forma en la ue interacta el usuario con la aplicacin se les denomina la apariencia visual. #os componentes de GUI de 1.ing nos permiten especificar una apariencia visual uniforme para una aplicacin a trav%s de todas las plataformas! o para usar la apariencia visual personalizada de cada plataforma.

#os componentes ligeros de 1.ing no estn enlazados a los componentes actuales de GUI ue soporte la plataforma sub"acente en la ue se e-ecuta una aplicacin. >arios componentes de 1.ing son componentes pesados! ue re uieren una interaccin directa con el sistema de ventanas local! lo cual puede restringir su apariencia " funcionalidad. #a clase Component (pa uete "a#a.awt' declara muc4os de los atributos " comportamientos comunes para los componentes de GUI en los pa uetes "a#a.awt " "a#a$.swing. #a clase Container (pa uete "a#a.awt' es una subclase de Component. #os ob-etos Component se ad-untan a los ob-etos Container! de manera ue puedan organizarse " mostrarse en la pantalla. #a clase Component (pa uete "a#a$.swing' es una subclase de Container. Component es la superclase de todos los componentes ligeros de 1.ing! " declara los atributos " comportamientos comunes. Algunas de las caracter&sticas comunes de Component son+ una apariencia visual adaptable! teclas de m%todo abreviado llamadas nemnicos! cuadros de informacin sobre 4erramientas! soporte para tecnolog&as de a"uda " soporte para la localizacin de la interfaz de usuario.

11.2 )ostrar te$to e im3genes en una #entana #a ma"or&a de las ventanas son instancias de la clase *rame o una subclase de *rame. *rame proporciona
los atributos " comportamientos bsicos de una ventana. Un ob-eto 4abel muestra una sola l&nea de te,to de slo lectura! una imagen! o te,to " una imagen. *or lo general! el te,to en un ob-eto 4abel usa la capitalizacin estilo oracin. Al crear una GUI! cada componente de %sta debe ad-untarse a un contenedor! como una ventana creada con un ob-eto *rame. :uc4os I'Es proporcionan 4erramientas de dise?o de GUIs! en las cuales podemos especificar el tama?o " la ubicacin e,actos de un componente mediante el uso del ratn! " despu%s el I5) genera el cdigo de la GUI por nosotros. )l m%todo set5ool5ip5e$t de Component especifica la informacin sobre 4erramientas ue se muestra cuando el usuario coloca el cursor del ratn sobre un componente ligero. )l m%todo add de Container ad-unta un componente de GUI a un ob-eto Container. #a clase ImageIcon (pa uete "a#a$.swing' soporta varios formatos de imagen! inclu"endo GI=! *2G " (*)G. )l m%todo getClass (de la clase !b"ect' obtiene una referencia al ob-eto Class ue representa la declaracin de la clase para el ob-eto en el ue se 4ace la llamada al m%todo. )l m%todo get6esource de Class devuelve la ubicacin de su argumento en forma de U@#. )l m%todo get6esource usa el cargador de clases del ob-eto Class para determinar la ubicacin del recurso. #a interfaz (wingConstants (pa uete "a#a$.swing' declara un con-unto de constantes enteras comunes ue se utilizan con muc4os componentes de 1.ing. #as alineaciones 4orizontal " vertical de un ob-eto 4abel se pueden establecer mediante los m%todos set7ori+ontal8lignment " set9ertical8lignment! respectivamente.

)l m%todo set5e$t de 4abel establece el te,to a mostrar en una eti ueta. )l correspondiente m%todo get5e$t obtiene el te,to actual ue se muestra en una eti ueta. )l m%todo setIcon de 4abel especifica el ob-eto Icon a mostrar en una eti ueta. )l correspondiente m%todo getIcon obtiene el ob-eto Icon actual ue se muestra en una eti ueta. #os m%todos set7ori+ontal5e$tPosition " set9ertical5e$tPosition de 4abel especifican la posicin del te,to en la eti ueta. )l m%todo set'e:aultClose!peration de *rame! con la constante *rame.E;I5<!=<C4!(E como argumento! indica ue el programa debe terminar cuando el usuario cierre la ventana. )l m%todo set(i+e de Component especifica la anc4ura " la altura de un componente.

// *ig. 11.>: 4abel*rame."a#a 'emostracin de la clase 4abel. import -ava.a.t.=lo.#a"out$ 00 especifica cmo se van a ordenar los componentes import -ava,.s.ing.(=rame$ 00 proporciona las caracter&sticas bsicas de una ventana import -ava,.s.ing.(#abel$ 00 muestra te,to e imgenes import -ava,.s.ing.1.ingAonstants$ 00 constantes comunes utilizadas con 1.ing import -ava,.s.ing.Icon$ 00 interfaz utilizada para manipular imgenes import -ava,.s.ing.ImageIcon$ 00 carga las imgenes public class 4abel*rame e$tends *rame private (#abel eti ueta7$ 00 (#abel slo con te,to private (#abel eti ueta8$ 00 (#abel construida con te,to " un icono private (#abel eti uetaB$ 00 (#abel con te,to adicional e icono // El constructor de 4abel*rame agrega ob"etos 4abel a *rame public 4abel*rame.) super( 6*rueba de (#abel6 '$ set#a"out( ne. =lo.#a"out(' '$ 00 establece el es uema del marco // Constructor de 4abel con un argumento (tring eti ueta7 3 ne. (#abel( 6)ti ueta con te,to6 '$ eti ueta7.setCoolCipCe,t( 6)sta es eti ueta76 '$ add( eti ueta7 '$ 00 agrega eti ueta7 a (=rame // Constructor de 4abel con argumentos de cadena? Icono , alineacin Icon insecto 3 ne. ImageIcon( getAlass('.get@esource( 6insecto7.gif6 ' '$ eti ueta8 3 ne. (#abel( 6)ti ueta con te,to e icono6! insecto! 1.ingAonstants.#)=C '$ eti ueta8.setCoolCipCe,t( 6)sta es eti ueta86 '$ add( eti ueta8 '$ 00 agrega eti ueta8 a (=rame eti uetaB 3 ne. (#abel('$ 00 Aonstructor de (#abel sin argumentos eti uetaB.setCe,t( 6)ti ueta con icono " te,to en la parte inferior6 '$ eti uetaB.setIcon( insecto '$ 00 agrega icono a (#abel eti uetaB.setDorizontalCe,t*osition( 1.ingAonstants.A)2C)@ '$ eti uetaB.set>erticalCe,t*osition( 1.ingAonstants.E/CC/: '$ eti uetaB.setCoolCipCe,t( 6)sta es eti uetaB6 '$ add( eti uetaB '$ 00 agrega eti uetaB a (=rame < 00 fin del constructor de #abel=rame < 00 fin de la clase #abel=rame

)l m%todo set9isible de Component con el argumento true muestra un ob-eto *rame en la pantalla.

// *ig. 11.@: Prueba4abel."a#a Prueba de 4abel*rame. import -ava,.s.ing.(=rame$ public class Prueba4abel public static #oid main. (tring args/0 ) #abel=rame marco)ti ueta 3 ne. #abel=rame('$ 00 crea ob-eto #abel=rame marco)ti ueta.set5efaultAlose/peration( (=rame.)FIC;/2;A#/1) '$ marco)ti ueta.set1ize( 8GH! 7IJ '$ 00 establece el tama?o del marco marco)ti ueta.set>isible( true '$ 00 muestra el marco < 00 fin de main < 00 fin de la clase *rueba#abel

11.A Campos de te$to , una introduccin al mane"o de e#entos con clases anidadas #as GUIs se controlan por eventos$ cuando el usuario interacta con un componente de GUI! los eventos
controlan al programa para realizar las tareas. )l cdigo ue realiza una tarea en respuesta a un evento se llama mane-ador de eventos! " el proceso general de responder a los eventos se conoce como mane-o de eventos. #a clase 5e$t*ield e,tiende a la clase 5e$tComponent (pa uete "a#a$.swing.te$t'! ue proporciona muc4as caracter&sticas comunes para los componentes de 1.ing basados en te,to. #a clase Password*ield e,tiende a 5e$t*ield " agrega varios m%todos espec&ficos para el procesamiento de contrase?as. Un ob-eto Password*ield muestra ue se estn escribiendo caracteres a medida ue el usuario los introduce! pero oculta los caracteres reales con caracteres de eco. Un componente recibe el enfo ue cuando el usuario 4ace clic sobre %l. )l m%todo setEditable de 5e$tComponent puede usarse para 4acer ue un campo de te,to no pueda editarse. Antes de ue una aplicacin pueda responder a un evento para un componente espec&fico de la GUI! debemos realizar varios pasos de codificacin+ 7' Arear una clase ue represente al mane-ador de eventos. 8' Implementar una interfaz apropiada! conocida como interfaz de escuc4a de eventos! en la clase del paso 7. B' Indicar ue se debe notificar a un ob-eto de la clase de los pasos 7 " 8 cuando ocurra el evento. A esto se le conoce como registrar el mane-ador de eventos. #as clases anidadas pueden ser static o no static. #as clases anidadas no static se llaman clases internas! " se utilizan con frecuencia para el mane-o de eventos. Antes de poder crear un ob-eto de una clase interna! debe 4aber primero un ob-eto de la clase de nivel superior! ue contenga a la clase interna! "a ue un ob-eto de la clase interna tiene de manera impl&cita una referencia a un ob-eto de su clase de nivel superior. Un ob-eto de la clase interna puede acceder directamente a todas las variables de instancia " m%todos de su clase de nivel superior. Una clase anidada ue sea static no re uiere un ob-eto de su clase de nivel superior! " no tiene de manera impl&cita una referencia a un ob-eto de la clase de nivel superior. Auando el usuario oprime Intro en un ob-eto 5e$t*ield o Password*ield! el componente de la GUI genera un evento 8ctionE#ent (pa uete "a#a.awt.e#ent'. 5ic4o evento se procesa mediante un ob-eto ue implementa a la interfaz 8ction4istener (pa uete "a#a.awt.e#ent'. )l m%todo add8ction4istener de 5e$t*ield registra el mane-ador de eventos para un campo de te,to de un componente. )ste m%todo recibe como argumento un ob-eto 8ction4istener. )l componente de GUI con el ue interacta el usuario es el origen del evento. Un ob-eto 8ctionE#ent contiene informacin acerca del evento ue acaba de ocurrir! como el origen del evento " el te,to en el campo de te,to.

)l m%todo get(ource de 8ctionE#ent devuelve una referencia al origen del evento. )l m%todo get8ctionCommand de 8ctionE#ent devuelve el te,to ue escribi el usuario en un campo de te,to o en la eti ueta de un ob-eto Button. )l m%todo getPassword de Password*ield devuelve la contrase?a ue escribi el usuario.

// *ig. 11.C: Campo5e$to)arco."a#a 'emostracin de la clase 5e$t*ield. import -ava.a.t.=lo.#a"out$ import -ava.a.t.event.Action#istener$ import -ava.a.t.event.Action)vent$ import -ava,.s.ing.(=rame$ import -ava,.s.ing.(Ce,t=ield$ import -ava,.s.ing.(*ass.ord=ield$ import -ava,.s.ing.(/ption*ane$ public class Campo5e$to)arco e$tends *rame private (Ce,t=ield campoCe,to7$ 00 campo de te,to con tama?o fi-o private (Ce,t=ield campoCe,to8$ 00 campo de te,to construido con te,to private (Ce,t=ield campoCe,toB$ 00 campo de te,to con te,to " tama?o private (*ass.ord=ield campoAontrasenia$ 00 campo de contrase?a con te,to 00 )l constructor de AampoCe,to:arco agrega ob-etos (Ce,t=ield a (=rame public Campo5e$to)arco.) super( 6*rueba de (Ce,t=ield " (*ass.ord=ield6 '$ set#a"out( ne. =lo.#a"out(' '$ 00 establece el es uema del marco 00 constru"e campo de te,to con 7J columnas campoCe,to7 3 ne. (Ce,t=ield( 7J '$ add( campoCe,to7 '$ 00 agrega campoCe,to7 a (=rame 00 constru"e campo de te,to con te,to predeterminado campoCe,to8 3 ne. (Ce,t=ield( 6)scriba el te,to a ui6 '$ add( campoCe,to8 '$ 00 agrega campoCe,to8 a (=rame 00 constru"e campo de te,to con te,to predeterminado " 87 columnas campoCe,toB 3 ne. (Ce,t=ield( 6Aampo de te,to no editable6! 87 '$ campoCe,toB.set)ditable( false '$ 00 des4abilita la edicin add( campoCe,toB '$ 00 agrega campoCe,toB a (=rame 00 constru"e campo de contrase?a con te,to predeterminado campoAontrasenia 3 ne. (*ass.ord=ield( 6Ce,to oculto6 '$ add( campoAontrasenia '$ 00 agrega campoAontrasenia a (=rame 00 registra los mane-adores de eventos :ane-adorAampoCe,to mane-ador 3 ne. :ane-adorAampoCe,to('$ campoCe,to7.addAction#istener( mane-ador '$ campoCe,to8.addAction#istener( mane-ador '$ campoCe,toB.addAction#istener( mane-ador '$ campoAontrasenia.addAction#istener( mane-ador '$ < 00 fin del constructor de AampoCe,to:arco 00 clase interna privada para el mane-o de eventos pri#ate class )ane"adorCampo5e$to implements 8ction4istener 00 procesa los eventos de campo de te,to public #oid actionPer:ormed. 8ctionE#ent e#ento ) 1tring cadena 3 66$ 00 declara la cadena a mostrar 00 el usuario oprimi Intro en el ob-eto (Ce,t=ield campoCe,to7 if ( evento.get1ource(' 33 campoCe,to7 ' cadena 3 1tring.format( 6campoCe,to7+ Ks6! evento.getActionAommand(' '$ 00 el usuario oprimi Intro en el ob-eto (Ce,t=ield campoCe,to8 else if ( evento.get1ource(' 33 campoCe,to8 ' cadena 3 1tring.format( 6campoCe,to8+ Ks6! evento.getActionAommand(' '$

Figura 11.9 | Objetos JTextField y JPasswordField. (Parte 1 de 2).

00 el usuario oprimi Intro en el ob-eto (Ce,t=ield campoCe,toB else if ( evento.get1ource(' 33 campoCe,toB ' cadena 3 1tring.format( 6campoCe,toB+ Ks6! evento.getActionAommand(' '$ 00 el usuario oprimi Intro en el ob-eto (Ce,t=ield campoAontrasenia else if ( evento.get1ource(' 33 campoAontrasenia ' cadena 3 1tring.format( 6campoAontrasenia+ Ks6! ne. 1tring( campoAontrasenia.get*ass.ord(' ' '$ 00 muestra el contenido del ob-eto (Ce,t=ield (/ption*ane.s4o.:essage5ialog( null! cadena '$ < 00 fin del m%todo action*erformed < 00 fin de la clase interna privada :ane-adorAampoCe,to < 00 fin de la clase AampoCe,to:arco

Figura 11.9 | Objetos JTextField y JPasswordField. (Parte 2 de 2).


// *ig. 11.1D: PruebaCampo5e$to."a#a Prueba de Campo5e$to)arco. import -ava,.s.ing.(=rame$ public class PruebaCampo5e$to public static #oid main. (tring args/0 ) AampoCe,to:arco campoCe,to:arco 3 ne. AampoCe,to:arco('$ campoCe,to:arco.set5efaultAlose/peration( (=rame.)FIC;/2;A#/1) '$ campoCe,to:arco.set1ize( BHJ! 7JJ '$ 00 establece el tama?o del marco campoCe,to:arco.set>isible( true '$ 00 muestra el marco < 00 fin de main < 00 fin de la clase *ruebaAampoCe,to

11.> 5ipos de e#entos comunes de la GUI e inter:aces de escuc&a *ara cada tipo de ob-eto evento 4a"! por lo general! una interfaz de escuc4a de eventos

ue le corresponde. Aada interfaz de escuc4a de eventos especifica uno o ms m%todos mane-adores de eventos! ue deben declararse en la clase ue implementa a la interfaz.

=igura 77.77 L Algunas clases de eventos del pa uete -ava.a.t.event.

11.@ Cmo :unciona el mane"o de e#entos Auando ocurre un evento! el componente de la GUI con el ue el usuario interactu notifica a sus
componentes de escuc4a registrados! llamando al m%todo de mane-o de eventos apropiado de cada componente de escuc4a. Codo ob-eto Component tiene una variable de instancia llamada listener4ist! la cual 4ace referencia a un ob-eto de la clase E#ent4istener4ist (pa uete "a#a$.swing.e#ent'. Aada ob-eto de una subclase de Component mantiene las referencias a todos sus componentes de escuc4a registrados en la variable listener4ist. Codo componente de la GUI soporta varios tipos de eventos! inclu"endo los eventos de ratn! de teclado " otros. Auando ocurre un evento! %ste se despac4a slo a los componentes de escuc4a de eventos del tipo apropiado. )l componente de la GUI recibe un I5 de evento nico! especificando el tipo de evento! el cual utiliza para decidir el tipo de componente de escuc4a al ue debe despac4arse el evento! " cul m%todo llamar en cada ob-eto componente de escuc4a.

11.E Button Un botn es un componente en el ue el usuario 4ace clic para desencadenar cierta accin. Codos los
tipos de botones son subclases de 8bstractButton (pa uete "a#a$.swing'! la cual declara las caracter&sticas comunes para los botones de 1.ing. *or lo general! las eti uetas de los botones usan la capitalizacin tipo t&tulo de libro$ un estilo ue capitaliza la primera letra de cada palabra significativa en el te,to! " no termina con ningn signo de puntuacin. #os botones de comandos se crean con la clase Button. Un ob-eto Button puede mostrar un ob-eto Icon. *ara proporcionar al usuario un nivel adicional de interaccin visual con la GUI! un ob-eto Button tambi%n puede tener un icono de sustitucin+ un ob-eto Icon ue se muestra cuando el usuario coloca el ratn sobre el botn. )l m%todo set6ollo#erIcon (de la clase 8bstractButton' especifica la imagen a mostrar en un botn! cuando el usuario coloca el ratn sobre %l.

00 =ig. 77.7H+ :arcoEoton.-ava 00 Areacin de ob-etos (Eutton. import -ava.a.t.=lo.#a"out$ import -ava.a.t.event.Action#istener$ import -ava.a.t.event.Action)vent$ import -ava,.s.ing.(=rame$ import -ava,.s.ing.(Eutton$ import -ava,.s.ing.Icon$ import -ava,.s.ing.ImageIcon$ import -ava,.s.ing.(/ption*ane$ public class )arcoBoton e$tends *rame private (Eutton boton(Eutton1imple$ 00 botn con te,to solamente private (Eutton boton(Eutton)legante$ 00 botn con iconos 00 :arcoEoton agrega ob-etos (Eutton a (=rame public )arcoBoton.) super( 6*rueba de botones6 '$ set#a"out( ne. =lo.#a"out(' '$ 00 establece el es uema del marco boton(Eutton1imple 3 ne. (Eutton( 6Eoton simple6 '$ 00 botn con te,to add( boton(Eutton1imple '$ 00 agrega boton(Eutton1imple a (=rame Icon insecto7 3 ne. ImageIcon( getAlass('.get@esource( 6insecto7.gif6 ' '$ Icon insecto8 3 ne. ImageIcon( getAlass('.get@esource( 6insecto8.gif6 ' '$ boton(Eutton)legante 3 ne. (Eutton( 6Eoton elegante6! insecto7 '$ 00 establece la imagen boton(Eutton)legante.set@olloverIcon( insecto8 '$ 00 establece la imagen de sustitucin add( boton(Eutton)legante '$ 00 agrega boton(Eutton)legante a (=rame 00 crea nuevo :ane-adorEoton para mane-ar los eventos de botn :ane-adorEoton mane-ador 3 ne. :ane-adorEoton('$ boton(Eutton)legante.addAction#istener( mane-ador '$ boton(Eutton1imple.addAction#istener( mane-ador '$ < 00 fin del constructor de :arcoEoton 00 clase interna para mane-ar eventos de botn pri#ate class )ane"adorBoton implements 8ction4istener 00 mane-a evento de botn public #oid actionPer:ormed. 8ctionE#ent e#ento ) (/ption*ane.s4o.:essage5ialog( :arcoEoton.t4is! 1tring.format( 6Usted oprimio+ Ks6! evento.getActionAommand(' ' '$ < 00 fin del m%todo action*erformed < 00 fin de la clase interna privada :ane-adorEoton < 00 fin de la clase :arcoEoton

// *ig. 11.1>: PruebaBoton."a#a Prueba de )arcoBoton. import -ava,.s.ing.(=rame$ public class PruebaBoton public static #oid main. (tring args/0 ) :arcoEoton marcoEoton 3 ne. :arcoEoton('$ 00 crea :arcoEoton marcoEoton.set5efaultAlose/peration( (=rame.)FIC;/2;A#/1) '$ marcoEoton.set1ize( BJJ! 77J '$ 00 establece el tama?o del marco marcoEoton.set>isible( true '$ 00 muestra el marco < 00 fin de main < 00 fin de la clase *ruebaEoton

11.C Botones %ue mantienen el estado #os componentes de la GUI de 1.ing contienen tres tipos de botones de estado+

5oggleButton! C&ecFBo$ " 6adioButton. #as clases C&ecFBo$ " 6adioButton son subclases de 5oggleButton. Un ob-eto 6adioButton es distinto de un ob-eto C&ecFBo$ en cuanto a ue! generalmente! 4a" varios ob-etos 6adioButton ue se agrupan! " slo puede seleccionarse un botn en el grupo! en un momento dado. )l m%todo set*ont (de la clase Component' establece el tipo de letra de un componente a un nuevo ob-eto de la clase =ont (pa uete "a#a.awt'. Auando el usuario 4ace clic en un ob-eto C&ecFBo$! ocurre un evento ItemE#ent. )ste evento puede mane-arse mediante un ob-eto Item4istener! ue debe implementar al m%todo item(tateC&anged. )l m%todo addItem4istener registra el componente de escuc4a para un ob-eto C&ecFBo$ o 6adioButton. )l m%todo is(elected de C&ecFBo$ determina si un ob-eto C&ecFBo$ est seleccionado. #os ob-etos 6adioButton son similares a los ob-etos C&ecFBo$ en cuanto a ue tienen dos estados+ seleccionado " no seleccionado. 1in embargo! generalmente los botones de opcin aparecen como un grupo! en el cual slo puede seleccionarse un botn a la vez. Al seleccionar un botn de opcin distinto! se obliga a los dems botones de opcin a deseleccionarse. #os ob-etos 6adioButton se utilizan para representar opciones mutuamente e,clusivas. #a relacin lgica entre los ob-etos 6adioButton se mantiene mediante un ob-eto ButtonGroup (pa uete "a#a$.swing'.

)l m%todo add de ButtonGroup asocia a cada ob-eto 6adioButton con un ob-eto ButtonGroup. 1i se agrega ms de un ob-eto 6adioButton seleccionado a un grupo! el primer ob-eto 6adioButton seleccionado ue se agregue ser el ue uede seleccionado cuando se muestre la GUI en pantalla. #os ob-etos 6adioButton generan eventos ItemE#ent cuando se 4ace clic sobre ellos.

// *ig. 11.1@: )arcoCasilla9eri:icacion."a#a Creacin de botones C&ecFBo$. import -ava.a.t.=lo.#a"out$ import -ava.a.t.=ont$ import -ava.a.t.event.Item#istener$ import -ava.a.t.event.Item)vent$ import -ava,.s.ing.(=rame$ import -ava,.s.ing.(Ce,t=ield$ import -ava,.s.ing.(A4ecMEo,$ public class )arcoCasilla9eri:icacion e$tends *rame private (Ce,t=ield campoCe,to$ 00 muestra el te,to en tipos de letra cambiantes private (A4ecMEo, negrita(A4ecMEo,$ 00 para seleccionar0deseleccionar negrita private (A4ecMEo, cursiva(A4ecMEo,$ 00 para seleccionar0deseleccionar cursiva 00 )l constructor de :arcoAasilla>erificacion agrega ob-etos (A4ecMEo, a (=rame public )arcoCasilla9eri:icacion.) N super( 6*rueba de (A4ecMEo,6 '$ set#a"out( ne. =lo.#a"out(' '$ 00 establece el es uema del marco 00 establece (Ce,t=ield " su tipo de letra campoCe,to 3 ne. (Ce,t=ield( 6/bserve como cambia el estilo de tipo de letra6! 8I '$ campoCe,to.set=ont( ne. =ont( 61erif6! =ont.*#AI2! 7O ' '$ add( campoCe,to '$ 00 agrega campoCe,to a (=rame negrita(A4ecMEo, 3 ne. (A4ecMEo,( 62egrita6 '$ 00 crea casilla de verificacin 6negrita6 cursiva(A4ecMEo, 3 ne. (A4ecMEo,( 6Aursiva6 '$ 00 crea casilla de verificacin 6cursiva6 add( negrita(A4ecMEo, '$ 00 agrega casilla de verificacin 6negrita6 a (=rame add( cursiva(A4ecMEo, '$ 00 agrega casilla de verificacin 6cursiva6 a (=rame 00 registra componentes de escuc4a para ob-etos (A4ecMEo, :ane-adorA4ecMEo, mane-ador 3 ne. :ane-adorA4ecMEo,('$ negrita(A4ecMEo,.addItem#istener( mane-ador '$ cursiva(A4ecMEo,.addItem#istener( mane-ador '$ < 00 fin del constructor de :arcoAasilla>erificacion 00 clase interna privada para el mane-o de eventos Item#istener private class :ane-adorA4ecMEo, implements Item#istener N private int val2egrita 3 =ont.*#AI2$ 00 controla el estilo de tipo de letra negrita private int valAursiva 3 =ont.*#AI2$ 00 controla el estilo de tipo de letra cursiva 00 responde a los eventos de casilla de verificacin public #oid item(tateC&anged. ItemE#ent e#ento ) 00 procesa los eventos de la casilla de verificacin 6negrita6 if ( evento.get1ource(' 33 negrita(A4ecMEo, ' val2egrita 3 negrita(A4ecMEo,.is1elected(' P =ont.E/#5 + =ont.*#AI2$ 00 procesa los eventos de la casilla de verificacin 6cursiva6 if ( evento.get1ource(' 33 cursiva(A4ecMEo, ' valAursiva 3 cursiva(A4ecMEo,.is1elected(' P =ont.ICA#IA + =ont.*#AI2$ 00 establece el tipo de letra del campo de te,to campoCe,to.set=ont( ne. =ont( 61erif6! val2egrita 9 valAursiva! 7O ' '$ < 00 fin del m%todo item1tateA4anged < 00 fin de la clase interna privada :ane-adorA4ecMEo, < 00 fin de la clase :arcoAasilla>erificacion

// *ig. 11.1E: PruebaCasilla9eri:icacion."a#a Prueba de )arcoCasilla9eri:icacion. import -ava,.s.ing.(=rame$ public class PruebaCasilla9eri:icacion public static #oid main. (tring args/0 ) :arcoAasilla>erificacion marcoAasilla>erificacion 3 ne. :arcoAasilla>erificacion('$ marcoAasilla>erificacion.set5efaultAlose/peration( (=rame.)FIC;/2;A#/1) '$ marcoAasilla>erificacion.set1ize( BHJ! 7JJ '$ 00 establece el tama?o del marco marcoAasilla>erificacion.set>isible( true '$ 00 muestra el marco < 00 fin de main < 00 fin de la clase *ruebaAasilla>erificacion

// *ig. 11.1C: )arcoBoton!pcion."a#a Creacin de botones de opcin? usando ButtonGroup , 6adioButton. import -ava.a.t.=lo.#a"out$ import -ava.a.t.=ont$ import -ava.a.t.event.Item#istener$ import -ava.a.t.event.Item)vent$ import -ava,.s.ing.(=rame$ import -ava,.s.ing.(Ce,t=ield$ import -ava,.s.ing.(@adioEutton$ import -ava,.s.ing.EuttonGroup$ public class )arcoBoton!pcion e$tends *rame private (Ce,t=ield campoCe,to$ 00 se utiliza para mostrar los cambios en el tipo de letra private =ont tipo#etra1imple$ 00 tipo de letra para te,to simple private =ont tipo#etra2egrita$ 00 tipo de letra para te,to en negrita private =ont tipo#etraAursiva$ 00 tipo de letra para te,to en cursiva private =ont tipo#etra2egritaAursiva$ 00 tipo de letra para te,to en negrita " cursiva private (@adioEutton simple(@adioEutton$ 00 selecciona te,to simple private (@adioEutton negrita(@adioEutton$ 00 selecciona te,to en negrita private (@adioEutton cursiva(@adioEutton$ 00 selecciona te,to en cursiva private (@adioEutton negritaAursiva(@adioEutton$ 00 negrita " cursiva private EuttonGroup grupo/pciones$ 00 grupo de botones ue contiene los botones de opcin 00 )l constructor de :arcoEoton/pcion agrega los ob-etos (@adioEutton a (=rame public )arcoBoton!pcion.) super( 6*rueba de @adioEutton6 '$ set#a"out( ne. =lo.#a"out(' '$ 00 establece el es uema del marco campoCe,to 3 ne. (Ce,t=ield( 6/bserve el cambio en el estilo del tipo de letra6! 8I '$ add( campoCe,to '$ 00 agrega campoCe,to a (=rame

11.C.2 6adioButton

Figura 11.19 | Objetos JRadioButton y ButtonGroup. (Parte 1 de 2).

00 crea los botones de opcin simple(@adioEutton 3 ne. (@adioEutton( 61imple6! true '$ negrita(@adioEutton 3 ne. (@adioEutton( 62egrita6! false '$ cursiva(@adioEutton 3 ne. (@adioEutton( 6Aursiva6! false '$ negritaAursiva(@adioEutton 3 ne. (@adioEutton( 62egrita0Aursiva6! false '$ add( simple(@adioEutton '$ 00 agrega botn simple a (=rame add( negrita(@adioEutton '$ 00 agrega botn negrita a (=rame add( cursiva(@adioEutton '$ 00 agrega botn cursiva a (=rame add( negritaAursiva(@adioEutton '$ 00 agrega botn negrita " cursiva 00 crea una relacin lgica entre los ob-etos (@adioEutton grupo/pciones 3 ne. EuttonGroup('$ 00 crea EuttonGroup grupo/pciones.add( simple(@adioEutton '$ 00 agrega simple al grupo grupo/pciones.add( negrita(@adioEutton '$ 00 agrega negrita al grupo grupo/pciones.add( cursiva(@adioEutton '$ 00 agrega cursiva al grupo grupo/pciones.add( negritaAursiva(@adioEutton '$ 00 agrega negrita " cursiva 00 crea ob-etos tipo de letra tipo#etra1imple 3 ne. =ont( 61erif6! =ont.*#AI2! 7O '$ tipo#etra2egrita 3 ne. =ont( 61erif6! =ont.E/#5! 7O '$ tipo#etraAursiva 3 ne. =ont( 61erif6! =ont.ICA#IA! 7O '$ tipo#etra2egritaAursiva 3 ne. =ont( 61erif6! =ont.E/#5 9 =ont.ICA#IA! 7O '$ campoCe,to.set=ont( tipo#etra1imple '$ 00 establece tipo letra inicial a simple 00 registra eventos para los ob-etos (@adioEutton simple(@adioEutton.addItem#istener( ne. :ane-adorEoton/pcion( tipo#etra1imple ' '$ negrita(@adioEutton.addItem#istener( ne. :ane-adorEoton/pcion( tipo#etra2egrita ' '$ cursiva(@adioEutton.addItem#istener( ne. :ane-adorEoton/pcion( tipo#etraAursiva ' '$ negritaAursiva(@adioEutton.addItem#istener( ne. :ane-adorEoton/pcion( tipo#etra2egritaAursiva ' '$ < 00 fin del constructor de :arcoEoton/pcion 00 clase interna privada para mane-ar eventos de botones de opcin pri#ate class )ane"adorBoton!pcion implements Item4istener private =ont tipo#etra$ 00 tipo de letra asociado con este componente de escuc4a public )ane"adorBoton!pcion. *ont : ) tipo#etra 3 f$ 00 establece el tipo de letra de este componente de escuc4a < 00 fin del constructor :ane-adorEoton/pcion 00 mane-a los eventos de botones de opcin public #oid item(tateC&anged. ItemE#ent e#ento ) campoCe,to.set=ont( tipo#etra '$ 00 establece el tipo de letra de campoCe,to < 00 fin del m%todo item1tateA4anged < 00 fin de la clase interna privada :ane-adorEoton/pcion < 00 fin de la clase :arcoEoton/pcion

Figura 11.19 | Objetos JRadioButton y ButtonGroup. (Parte 1 de 2).


// *ig. 11.2D: PruebaBoton!pcion."a#a Prueba de )arcoBoton!pcion. import -ava,.s.ing.(=rame$ public class PruebaBoton!pcion public static #oid main. (tring args/0 ) :arcoEoton/pcion marcoEoton/pcion 3 ne. :arcoEoton/pcion('$ marcoEoton/pcion.set5efaultAlose/peration( (=rame.)FIC;/2;A#/1) '$ marcoEoton/pcion.set1ize( BHJ! 7JJ '$ 00 establece el tama?o del marco marcoEoton/pcion.set>isible( true '$ 00 muestra el marco < 00 fin de main < 00 fin de la clase *ruebaEoton/pcion

11.1D ComboBo$ , el uso de una clase interna annima para el mane"o de e#entos Un ob-eto ComboBo$ proporciona una lista de elementos! de los cuales el usuario puede seleccionar
uno. #os ob-etos ComboBo$ generan eventos ItemE#ent. Aada elemento en un ob-eto ComboBo$ tiene un &ndice. )l primer elemento ue se agrega a un ob-eto ComboBo$ aparece como el elemento actualmente seleccionado cuando se muestra el ob-eto (AomboEo,. #os otros elementos se seleccionan 4aciendo clic en el ob-eto (AomboEo,! el cual se e,pande en una lista! de la cual el usuario puede seleccionar un elemento. )l m%todo set)a$imum6owCount de ComboBo$ establece el m,imo nmero de elementos a mostrar cuando el usuario 4aga clic en el ob-eto ComboBo$. 1i 4a" elementos adicionales! el ob-eto ComboBo$ proporciona una barra de desplazamiento ue permite al usuario desplazarse por todos los elementos en la lista. Una clase interna annima es una forma especial de clase interna! ue se declara sin un nombre " por lo general aparece dentro de la declaracin de un m%todo. Aomo una clase interna annima no tiene nombre! un ob-eto de la clase interna annima debe crearse en el punto en el ue se declara la clase. )l m%todo get(electedInde$ de comboBo$ devuelve el &ndice del elemento seleccionado.

// *ig. 11.21: )arcoCuadroCombinado."a#a Uso de un ob"eto ComboBo$ para seleccionar una imagen a mostrar. import -ava.a.t.=lo.#a"out$ import -ava.a.t.event.Item#istener$ import -ava.a.t.event.Item)vent$ import -ava,.s.ing.(=rame$ import -ava,.s.ing.(#abel$ import -ava,.s.ing.(AomboEo,$ import -ava,.s.ing.Icon$ import -ava,.s.ing.ImageIcon$ public class )arcoCuadroCombinado e$tends *rame private (AomboEo, imagenes(AomboEo,$ 00 cuadro combinado con los nombres de los iconos private (#abel eti ueta$ 00 eti ueta para mostrar el icono seleccionado private 1tring nombresQR 3 N 6insecto7.gif6! 6insecto8.gif6! 6insectvia-e.gif6! 6insectanim.gif6 <$ private Icon iconosQR 3 N ne. ImageIcon( getAlass('.get@esource( nombresQ J R ' '! ne. ImageIcon( getAlass('.get@esource( nombresQ 7 R ' '! ne. ImageIcon( getAlass('.get@esource( nombresQ 8 R ' '! ne. ImageIcon( getAlass('.get@esource( nombresQ B R ' ' <$ 00 )l constructor de :arcoAuadroAombinado agrega un ob-eto (AomboEo, a (=rame public )arcoCuadroCombinado.) super( 6*rueba de (AomboEo,6 '$ set#a"out( ne. =lo.#a"out(' '$ 00 establece el es uema del marco

Figura 11.21 | Objeto JComboBox que muestra una lista de nombres de imgenes. (Parte 1 de 2).

imagenes(AomboEo, 3 ne. (AomboEo,( nombres '$ 00 establece (AomboEo, imagenes(AomboEo,.set:a,imum@o.Aount( B '$ 00 muestra tres filas imagenes(AomboEo,.addItem#istener( ne. Item#istener(' 00 clase interna annima N 00 mane-a evento de (AomboEo, public #oid item(tateC&anged. ItemE#ent e#ento ) 00 determina si est seleccionada la casilla de verificacin if ( evento.get1tateA4ange(' 33 Item)vent.1)#)AC)5 ' eti ueta.setIcon( iconosQ imagenes(AomboEo,.get1electedInde,(' R '$ < 00 fin del m%todo item1tateA4anged < 00 fin de la clase interna annima '$ 00 fin de la llamada a addItem#istener add( imagenes(AomboEo, '$ 00 agrega cuadro combinado a (=rame eti ueta 3 ne. (#abel( iconosQ J R '$ 00 muestra el primer icono add( eti ueta '$ 00 agrega eti ueta a (=rame < 00 fin del constructor de :arcoAuadroAombinado < 00 fin de la clase :arcoAuadroAombinado

Figura 11.21 | Objeto JComboBox que muestra una lista de nombres de imgenes. (Parte 2 de 2).

// *ig. 11.22: PruebaCuadroCombinado."a#a Prueba de )arcoCuadroCombinado. import -ava,.s.ing.(=rame$ public class PruebaCuadroCombinado public static #oid main. (tring args/0 ) :arcoAuadroAombinado marcoAuadroAombinado 3 ne. :arcoAuadroAombinado('$ marcoAuadroAombinado.set5efaultAlose/peration( (=rame.)FIC;/2;A#/1) '$ marcoAuadroAombinado.set1ize( BHJ! 7HJ '$ 00 establece el tama?o del marco marcoAuadroAombinado.set>isible( true '$ 00 muestra el marco < 00 fin de main < 00 fin de la clase *ruebaAuadroAombinado

11.11 4ist Un ob-eto 4ist muestra una serie de elementos! de los cuales el usuario puede seleccionar uno o ms.
#a clase 4ist soporta las listas de seleccin simple " de seleccin mltiple. Auando el usuario 4ace clic en un elemento de un ob-eto 4ist! se produce un evento 4ist(electionE#ent. )l m%todo add4ist(election4istener registra un ob-eto 4ist(election4istener para los eventos de seleccin de un ob-eto 4ist. Un ob-eto 4ist(election4istener (pa uete "a#a$.swing.e#ent' debe implementar el m%todo #alueC&anged. )l m%todo set9isible6owCount de 4ist especifica el nmero de elementos visibles en la lista. )l m%todo set(election)ode de 4ist especifica el modo de seleccin de una lista.

Un ob-eto 4ist no proporciona una barra de desplazamiento si 4a" ms elementos en la lista ue el nmero de fi las visibles. )n este caso! puede usarse un ob-eto (crollPane para proporcionar la capacidad de desplazamiento. )l m%todo getContentPane de *rame devuelve una referencia al panel de contenido de *rame! en donde se muestran los componentes de la GUI. )l m%todo get(electedInde$ de 4ist devuelve el &ndice del elemento seleccionado.

// *ig. 11.21: )arco4ista."a#a (eleccin de colores de un ob"eto 4ist. import -ava.a.t.=lo.#a"out$ import -ava.a.t.Aolor$ import -ava,.s.ing.(=rame$ import -ava,.s.ing.(#ist$ import -ava,.s.ing.(1croll*ane$ import -ava,.s.ing.event.#ist1election#istener$ import -ava,.s.ing.event.#ist1election)vent$ import -ava,.s.ing.#ist1election:odel$ public class )arco4ista e$tends *rame private (#ist lista(#istAolores$ 00 lista para mostrar colores private final 1tring nombresAoloresQR 3 N 62egro6! 6Azul6! 6A"an6! 6Gris oscuro6! 6Gris6! 6>erde6! 6Gris claro6! 6:agenta6! 62aran-a6! 6@osa6! 6@o-o6! 6Elanco6! 6Amarillo6 <$ private final Aolor coloresQR 3 N Aolor.E#AAS! Aolor.E#U)! Aolor.ATA2! Aolor.5A@S;G@AT! Aolor.G@AT! Aolor.G@))2! Aolor.#IGDC;G@AT! Aolor.:AG)2CA! Aolor./@A2G)! Aolor.*I2S! Aolor.@)5! Aolor.UDIC)! Aolor.T)##/U <$ 00 )l constructor de :arco#ista agrega a (=rame el (1croll*ane ue contiene a (#ist public )arco4ista.) super( 6*rueba de (#ist6 '$ set#a"out( ne. =lo.#a"out(' '$ 00 establece el es uema del marco lista(#istAolores 3 ne. (#ist( nombresAolores '$ 00 crea con nombresAolores lista(#istAolores.set>isible@o.Aount( H '$ 00 muestra cinco filas a la vez 00 no permite selecciones mltiples lista(#istAolores.set1election:ode( #ist1election:odel.1I2G#);1)#)ACI/2 '$ 00 agrega al marco un ob-eto (1croll*ane ue contiene a (#ist add( ne. (1croll*ane( lista(#istAolores ' '$ lista 4istColores.add4ist(election4istener. new 4ist(election4istener.) // clase interna annima N 00 mane-a los eventos de seleccin de la lista public #oid #alueC&anged. 4ist(electionE#ent e#ento ) getAontent*ane('.setEacMground( coloresQ lista(#istAolores.get1electedInde,(' R '$ < 00 fin del m%todo valueA4anged < 00 fin de la clase interna annima '$ 00 fin de la llamada a add#ist1election#istener < 00 fin del constructor de :arco#ista < 00 fin de la clase :arco#ista

// *ig. 11.22: Prueba4ista."a#a import -ava,.s.ing.(=rame$

(eleccin de colores de un ob"eto 4ist.

public class Prueba4ista public static #oid main. (tring args/0 ) :arco#ista marco#ista 3 ne. :arco#ista('$ 00 crea ob-eto :arco#ista marco#ista.set5efaultAlose/peration( (=rame.)FIC;/2;A#/1) '$ marco#ista.set1ize( BHJ! 7HJ '$ 00 establece el tama?o del marco marco#ista.set>isible( true '$ 00 muestra el marco < 00 fin de main < 00 fin de la clase *rueba#ista

11.12 4istas de seleccin mGltiple Una lista de seleccin mltiple permite al usuario seleccionar muc4os elementos de un ob-eto 4ist. )l m%todo set*i$edCellHidt& de 4ist establece la anc4ura de un ob-eto 4ist. )l m%todo
set*i$edCell7eig&t establece la altura de cada elemento en un ob-eto 4ist. 2o 4a" eventos para indicar ue un usuario 4a realizado varias selecciones en una lista de seleccin mltiple. *or lo general! un evento e,terno generado por otro componente de la GUI especifica cundo deben procesarse las selecciones mltiples en un ob-eto (#ist. )l m%todo set4ist'ata de 4ist establece los elementos a mostrar en un ob-eto 4ist. )l m%todo get(elected9alues de 4ist devuelve un arreglo de ob-etos !b"ect ue representan los elementos seleccionados en un ob-eto 4ist.
Copiar elementos de un ob"eto 4ista otro.

// *ig. 11.2A: )arco(eleccion)ultiple."a#a import -ava.a.t.=lo.#a"out$ import -ava.a.t.event.Action#istener$ import -ava.a.t.event.Action)vent$ import -ava,.s.ing.(=rame$ import -ava,.s.ing.(#ist$ import -ava,.s.ing.(Eutton$ import -ava,.s.ing.(1croll*ane$ import -ava,.s.ing.#ist1election:odel$

public class )arco(eleccion)ultiple e$tends *rame private (#ist lista(#istAolores$ 00 lista para guardar los nombres de los colores private (#ist lista(#istAopia$ 00 lista en la ue se van a copiar los nombres de los colores private (Eutton boton(EuttonAopiar$ 00 botn para copiar los nombres seleccionados private final 1tring nombresAoloresQR 3 N 62egro6! 6Azul6! 6A"an6! 6Gris oscuro6! 6Gris6! 6>erde6! 6Gris claro6! 6:agenta6! 62aran-a6! 6@osa6! 6@o-o6! 6Elanco6! 6Amarillo6 <$ 00 Aonstructor de :arco1eleccion:ultiple public )arco(eleccion)ultiple.) super( 6#istas de seleccion multiple6 '$ set#a"out( ne. =lo.#a"out(' '$ 00 establece el es uema del marco

Figura 11.25 | Objeto JList que permite selecciones mltiples. (Parte 1 de 2).
lista(#istAolores 3 ne. (#ist( nombresAolores '$ 00 contiene nombres de todos los colores lista(#istAolores.set>isible@o.Aount( H '$ 00 muestra cinco filas lista(#istAolores.set1election:ode( #ist1election:odel.:U#CI*#);I2C)@>A#;1)#)ACI/2 '$ add( ne. (1croll*ane( lista(#istAolores ' '$ 00 agrega lista con panel de desplazamiento boton(EuttonAopiar 3 ne. (Eutton( 6Aopiar VVV6 '$ 00 crea botn para copiar boton(EuttonAopiar.addAction#istener( ne. Action#istener(' 00 clase interna annima N 00 mane-a evento de botn public void action*erformed( Action)vent evento ' N 00 coloca los valores seleccionados en lista(#istAopia lista(#istAopia.set#ist5ata( lista(#istAolores.get1elected>alues(' '$ < 00 fin del m%todo action*erformed < 00 fin de la clase interna annima '$ 00 fin de la llamada a addAction#istener add( boton(EuttonAopiar '$ 00 agrega el botn copiar a (=rame lista(#istAopia 3 ne. (#ist('$ 00 crea lista para guardar nombres de colores copiados lista(#istAopia.set>isible@o.Aount( H '$ 00 muestra H filas lista(#istAopia.set=i,edAellUidt4( 7JJ '$ 00 establece la anc4ura lista(#istAopia.set=i,edAellDeig4t( 7H '$ 00 establece la altura lista(#istAopia.set1election:ode( #ist1election:odel.1I2G#);I2C)@>A#;1)#)ACI/2 '$ add( ne. (1croll*ane( lista(#istAopia ' '$ 00 agrega lista con panel de desplazamiento < 00 fin del constructor de :arco1eleccion:ultiple < 00 fin de la clase :arco1eleccion:ultiple

Figura 11.25 | Objeto JList que permite selecciones mltiples. (Parte 2 de 2).
// *ig. 11.2>: Prueba(eleccion)ultiple."a#a import -ava,.s.ing.(=rame$ Prueba de )arco(eleccion)ultiple.

public class Prueba(eleccion)ultiple public static #oid main. (tring args/0 ) :arco1eleccion:ultiple marco1eleccion:ultiple 3 ne. :arco1eleccion:ultiple('$ marco1eleccion:ultiple.set5efaultAlose/peration( (=rame.)FIC;/2;A#/1) '$ marco1eleccion:ultiple.set1ize( BHJ! 7OJ '$ 00 establece el tama?o del marco marco1eleccion:ultiple.set>isible( true '$ 00 muestra el marco < 00 fin de main < 00 fin de la clase *rueba1eleccion:ultiple

11.11 )ane"o de e#entos del ratn #as interfaces de escuc4a de eventos )ouse4istener " )ouse)otion4istener se utilizan para mane-ar
los eventos del ratn. )stos eventos se pueden atrapar para cual uier componente de la GUI ue e,tienda a Component. #a interfaz )ouseInput4istener (pa uete "a#a$.swing.e#ent' e,tiende a las interfaces )ouse4istener " )ouse)otion4istener para crear una sola interfaz ue contenga a todos sus m%todos. Aada uno de los m%todos mane-adores de eventos del ratn recibe un ob-eto )ouseE#ent como argumento. Un ob-eto )ouseE#ent contiene informacin acerca del evento de ratn ue ocurri! inclu"endo las coordenadas $ " , de la ubicacin en donde ocurri el evento. )stas coordenadas se miden empezando desde la es uina superior iz uierda del componente de la GUI en donde ocurri el evento. #os m%todos " constantes de la clase InputE#ent (superclase de )ouseE#ent' permiten a una aplicacin determinar cul botn oprimi el usuario. #a interfaz )ouseH&eel4istener permite a las aplicaciones responder a la rotacin de la rueda de un ratn. #os componentes de la GUI 4eredan los m%todos add)ouse4istener " add)ouse)otion4istener de la clase Component.

// *ig. 11.2E: )arco6astreador6aton."a#a 'emostracin de los e#entos de ratn. import -ava.a.t.Aolor$ import -ava.a.t.Eorder#a"out$ import -ava.a.t.event.:ouse#istener$ import -ava.a.t.event.:ouse:otion#istener$ import -ava.a.t.event.:ouse)vent$ import -ava,.s.ing.(=rame$ import -ava,.s.ing.(#abel$ import -ava,.s.ing.(*anel$ public class )arco6astreador6aton e$tends *rameprivate (*anel panel@aton$ 00 panel en el ue ocurrirn los eventos de ratn private (#abel barra)stado$ 00 eti ueta ue muestra informacin de los eventos 00 )l constructor de :arco@astreador@aton establece la GUI " 00 registra los mane-adores de eventos de ratn public )arco6astreador6aton.) super( 65emostracion de los eventos de raton6 '$ panel@aton 3 ne. (*anel('$ 00 crea el panel panel@aton.setEacMground( Aolor.UDIC) '$ 00 establece el color de fondo add( panel@aton! Eorder#a"out.A)2C)@ '$ 00 agrega el panel a (=rame barra)stado 3 ne. (#abel( 6@aton fuera de (*anel6 '$ add( barra)stado! Eorder#a"out.1/UCD '$ 00 agrega eti ueta a (=rame 00 crea " registra un componente de escuc4a para los eventos de ratn " de su movimiento :ane-ador@aton mane-ador 3 ne. :ane-ador@aton('$ panel@aton.add:ouse#istener( mane-ador '$ panel@aton.add:ouse:otion#istener( mane-ador '$ < 00 fin del constructor de :arco@astreador@aton pri#ate class )ane"ador6aton implements )ouse4istener? )ouse)otion4istener N 00 #os mane-adores de eventos de :ouse#istener 00 mane-an el evento cuando se suelta el ratn -usto despu%s de oprimir el botn public #oid mouseClicFed. )ouseE#ent e#ento ) barra)stado.setCe,t( 1tring.format( 61e 4izo clic en QKd! KdR6! evento.getF('! evento.getT(' ' '$ < 00 fin del m%todo mouseAlicMed 00 mane-a evento cuando se oprime el ratn public #oid mousePressed. )ouseE#ent e#ento ) barra)stado.setCe,t( 1tring.format( 61e oprimio en QKd! KdR6! evento.getF('! evento.getT(' ' '$ < 00 fin del m%todo mouse*ressed 00 mane-a evento cuando se suelta el botn del ratn despu%s de arrastrarlo public #oid mouse6eleased. )ouseE#ent e#ento ) barra)stado.setCe,t( 1tring.format( 61e solto en QKd! KdR6! evento.getF('! evento.getT(' ' '$ < 00 fin del m%todo mouse@eleased 00 mane-a evento cuando el ratn entra al rea public #oid mouseEntered. )ouseE#ent e#ento ) barra)stado.setCe,t( 1tring.format( 6@aton entro en QKd! KdR6! evento.getF('! evento.getT(' ' '$ panel@aton.setEacMground( Aolor.G@))2 '$ < 00 fin del m%todo mouse)ntered

Figura 11.28 |

anejo de e!entos de rat"n. (Parte 1 de 2).

00 mane-a evento cuando el ratn sale del rea public #oid mouseE$ited. )ouseE#ent e#ento ) barra)stado.setCe,t( 6@aton fuera de (*anel6 '$ panel@aton.setEacMground( Aolor.UDIC) '$ < 00 fin del m%todo mouse),ited 00 #os mane-adores de eventos de :ouse:otion#istener mane-an 00 el evento cuando el usuario arrastra el ratn con el botn oprimido public #oid mouse'ragged. )ouseE#ent e#ento ) barra)stado.setCe,t( 1tring.format( 61e arrastro en QKd! KdR6! evento.getF('! evento.getT(' ' '$ < 00 fin del m%todo mouse5ragged 00 mane-a evento cuando el usuario mueve el ratn public #oid mouse)o#ed. )ouseE#ent e#ento ) barra)stado.setCe,t( 1tring.format( 61e movio en QKd! KdR6! evento.getF('! evento.getT(' ' '$ < 00 fin del m%todo mouse:oved < 00 fin de la clase interna :ane-ador@aton < 00 fin de la clase :arco@astreador@aton

Figura 11.28 |

anejo de e!entos de rat"n. (Parte 1 de 2).


Prueba de )arco6astreador6aton.

// *ig. 11.2C: )arco6astreador6aton."a#a import -ava,.s.ing.(=rame$

public class 6astreador6aton public static #oid main. (tring args/0 ) :arco@astreador@aton marco@astreador@aton 3 ne. :arco@astreador@aton('$ marco@astreador@aton.set5efaultAlose/peration( (=rame.)FIC;/2;A#/1) '$ marco@astreador@aton.set1ize( BJJ! 7JJ '$ 00 establece el tama?o del marco marco@astreador@aton.set>isible( true '$ 00 muestra el marco < 00 fin de main < 00 fin de la clase @astreador@aton

11.12 Clases adaptadoras :uc4as interfaces de escuc4a de eventos contienen varios m%todos. *ara muc4as de estas interfaces! los
pa uetes "a#a.awt.e#ent " "a#a$.swing.e#ent proporcionan clases adaptadoras de escuc4a de eventos. Una clase adaptadora implementa a una interfaz " proporciona una implementacin predeterminada de cada m%todo en la interfaz. *odemos e,tender una clase adaptadora para ue 4erede la implementacin predeterminada de cada m%todo! " por consiguiente! podemos sobrescribir slo el (los' m%todo(s' necesario(s' para el mane-o de eventos. )l m%todo getClicFCount de )ouseE#ent devuelve el nmero de clics de los botones del ratn. #os m%todos is)eta'own e is8lt'own determinan cul botn del ratn oprimi el usuario.

// *ig. 11.11: )arco'etalles6aton."a#a 'emostracin de los clics del ratn , cmo di:erenciar los botones del mismo. import -ava.a.t.Eorder#a"out$ import -ava.a.t.Grap4ics$ import -ava.a.t.event.:ouseAdapter$ import -ava.a.t.event.:ouse)vent$ import -ava,.s.ing.(=rame$ import -ava,.s.ing.(#abel$ public class )arco'etalles6aton e$tends *rame private 1tring detalles$ 00 ob-eto 1tring ue representa al ob-eto (#abel private (#abel barra)stado$ 00 ue aparece en la parte inferior de la ventana 00 constructor establece 1tring de la barra de t&tulo " registra componente de escuc4a del ratn public )arco'etalles6aton.) super( 6Alics " botones del raton6 '$ barra)stado 3 ne. (#abel( 6Daga clic en el raton6 '$ add( barra)stado! Eorder#a"out.1/UCD '$ add:ouse#istener( ne. :ane-adorAlic@aton(' '$ 00 agrega el mane-ador < 00 fin del constructor de :arco5etalles@aton 00 clase interna para mane-ar los eventos del ratn pri#ate class )ane"adorClic6aton e$tends )ouse8dapter 00 mane-a evento de clic del ratn " determina cul botn se oprimi public #oid mouseClicFed. )ouseE#ent e#ento ) int ,*os 3 evento.getF('$ 00 obtiene posicin , del ratn int "*os 3 evento.getT('$ 00 obtiene posicin " del ratn detalles 3 1tring.format( 61e 4izo clic Kd vez(veces'6! evento.getAlicMAount(' '$ if ( evento.is:eta5o.n(' ' 00 botn derec4o del ratn detalles 93 6 con el boton derec4o del raton6$ else if ( evento.isAlt5o.n(' ' 00 botn central del ratn detalles 93 6 con el boton central del raton6$ else 00 botn iz uierdo del ratn detalles 93 6 con el boton iz uierdo del raton6$ barra)stado.setCe,t( detalles '$ 00 muestra mensa-e en barra)stado < 00 fin del m%todo mouseAlicMed < 00 fin de la clase interna privada :ane-adorAlic@aton < 00 fin de la clase :arco5etalles@aton

// *ig. 11.12: 'etalles6aton."a#a import -ava,.s.ing.(=rame$

Prueba de )arco'etalles6aton.

public class 'etalles6aton public static #oid main. (tring args/0 ) :arco5etalles@aton marco5etalles@aton 3 ne. :arco5etalles@aton('$ marco5etalles@aton.set5efaultAlose/peration( (=rame.)FIC;/2;A#/1) '$ marco5etalles@aton.set1ize( OJJ! 7HJ '$ 00 establece el tama?o del marco marco5etalles@aton.set>isible( true '$ 00 muestra el marco < 00 fin de main < 00 fin de la clase 5etalles@aton

11.1A (ubclase de Panel para dibu"ar con el ratn #os componentes ligeros de 1.ing ue e,tienden a la clase

Component contienen el m%todo paintComponent! el cual se llama cuando se muestra un componente ligero de 1.ing. Al sobrescribir este m%todo! puede especificar cmo dibu-ar fi guras usando las 4erramientas de grficos de (ava. Al personalizar un ob-eto Panel para usarlo como un rea dedicada de dibu-o! la subclase debe sobrescribir el m%todo paintComponent " llamar a la versin de paintComponent de la superclase como la primera instruccin en el cuerpo del m%todo sobrescrito. #as subclases de Component soportan la transparencia. Auando un componente es opaco! paintComponent borra el fondo del componente antes de mostrarlo en pantalla. #a transparencia de un componente ligero de 1.ing puede establecerse con el m%todo set!pa%ue (un argumento false indica ue el componente es transparente'. #a clase Point (pa uete "a#a.awt' representa una coordenada ,W". #a clase Grap&ics se utiliza para dibu-ar. )l m%todo getPoint de )ouseE#ent obtiene el ob-eto *oint en donde ocurri un evento de ratn. )l m%todo repaint (4eredado directamente de la clase Component' indica ue un componente debe actualizarse en la pantalla lo ms pronto posible. )l m%todo paintComponent recibe un parmetro Grap&ics! " se llama de manera automtica cada vez ue un componente ligero necesita mostrarse en la pantalla.

)l m%todo :ill!#al de Grap&ics dibu-a un valo relleno. #os cuatro parmetros del m%todo representan el cuadro delimitador en el cual se muestra el valo. #os primeros dos parmetros son la coordenada , superior iz uierda " la coordenada " superior iz uierda del rea rectangular. #as ltimas dos coordenadas representan la anc4ura " la altura del rea rectangular.

// *ig. 11.12: Pintor."a#a Prueba de Panel'ibu"o. import -ava.a.t.Eorder#a"out$ import -ava,.s.ing.(=rame$ import -ava,.s.ing.(#abel$ public class Pintor public static #oid main. (tring args/0 ) 00 crea ob-eto (=rame (=rame aplicacion 3 ne. (=rame( 6Un programa simple de dibu-o6 '$ *anel5ibu-o panel5ibu-o 3 ne. *anel5ibu-o('$ 00 crea panel de dibu-o aplicacion.add( panel5ibu-o! Eorder#a"out.A)2C)@ '$ 00 en el centro 00 crea una eti ueta " la coloca en la regin 1/UCD de Eorder#a"out aplicacion.add( ne. (#abel( 6Arrastre el raton para dibu-ar6 '! Eorder#a"out.1/UCD '$ aplicacion.set5efaultAlose/peration( (=rame.)FIC;/2;A#/1) '$ aplicacion.set1ize( OJJ! 8JJ '$ 00 establece el tama?o del marco aplicacion.set>isible( true '$ 00 muestra el marco < 00 fin de main < 00 fin de la clase *intor

// *ig. 11.1A: Pintor."a#a Prueba de Panel'ibu"o. import -ava.a.t.Eorder#a"out$ import -ava,.s.ing.(=rame$ import -ava,.s.ing.(#abel$ public class Pintor public static #oid main. (tring args/0 ) 00 crea ob-eto (=rame (=rame aplicacion 3 ne. (=rame( 6Un programa simple de dibu-o6 '$ *anel5ibu-o panel5ibu-o 3 ne. *anel5ibu-o('$ 00 crea panel de dibu-o aplicacion.add( panel5ibu-o! Eorder#a"out.A)2C)@ '$ 00 en el centro 00 crea una eti ueta " la coloca en la regin 1/UCD de Eorder#a"out aplicacion.add( ne. (#abel( 6Arrastre el raton para dibu-ar6 '! Eorder#a"out.1/UCD '$ aplicacion.set5efaultAlose/peration( (=rame.)FIC;/2;A#/1) '$ aplicacion.set1ize( OJJ! 8JJ '$ 00 establece el tama?o del marco aplicacion.set>isible( true '$ 00 muestra el marco < 00 fin de main < 00 fin de la clase *intor

11.1> )ane"o de e#entos de teclas #a interfaz Ie,4istener se utiliza para mane-ar eventos de teclas! ue se generan cuando se oprimen " sueltan
las teclas en el teclado. )l m%todo addIe,4istener de la clase Component registra un ob-eto Ie,4istener para un componente. )l m%todo getIe,Code de Ie,E#ent obtiene el cdigo de tecla virtual de la tecla oprimida. #a clase Ie,E#ent mantiene un con-unto de constantes de cdigo de tecla virtual ue representa a todas las teclas en el teclado. )l m%todo getIe,5e$t de Ie,E#ent devuelve una cadena ue contiene el nombre de la tecla ue se oprimi. )l m%todo getIe,C&ar de Ie,E#ent obtiene el valor Unicode del carcter escrito. )l m%todo is8ctionIe, de Se")vent determina si la tecla en un evento fue una tecla de accin. )l m%todo get)odi:iers de InputE#ent determina si se oprimi alguna tecla modificadora (como )a,Gs! 8lt " Ctrl ' cuando ocurri el evento de tecla. )l m%todo getIe,)odi:iers5e$t de Ie,E#ent produce una cadena ue contiene los nombres de las teclas modificadoras ue se oprimieron.

// *ig. 11.1>: )arco'emo5eclas."a#a


import -ava.a.t.Aolor$ import -ava.a.t.event.Se"#istener$ import -ava.a.t.event.Se")vent$ import -ava,.s.ing.(=rame$ import -ava,.s.ing.(Ce,tArea$

'emostracin de los e#entos de pulsacin de teclas.

public class )arco'emo5eclas e$tends *rame implements Ie,4istener private 1tring linea7 3 66$ 00 primera l&nea del rea de te,to private 1tring linea8 3 66$ 00 segunda l&nea del rea de te,to private 1tring lineaB 3 66$ 00 tercera l&nea del rea de te,to private (Ce,tArea areaCe,to$ 00 rea de te,to para mostrar la salida public )arco'emo5eclas.) 00 constructor de :arco5emoCeclas super( 65emostracin de los eventos de pulsacion de teclas6 '$ areaCe,to 3 ne. (Ce,tArea( 7J! 7H '$ 00 establece el ob-eto (Ce,tArea areaCe,to.setCe,t( 6/prima cual uier tecla en el teclado...6 '$ areaCe,to.set)nabled( false '$ 00 des4abilita el rea de te,to areaCe,to.set5isabledCe,tAolor( Aolor.E#AAS '$ 00 establece el color del te,to add( areaCe,to '$ 00 agrega areaCe,to a (=rame addSe"#istener( t4is '$ 00 permite al marco procesar los eventos de teclas < 00 fin del constructor de :arco5emoCeclas public #oid Fe,Pressed. Ie,E#ent e#ento ) 00 mane-a el evento de oprimir cual uier tecla linea7 3 1tring.format( 6Cecla oprimida+ Ks6! evento.getSe"Ce,t( evento.getSe"Aode(' ' '$ 00 imprime la tecla oprimida establecer#ineas8"B( evento '$ 00 establece las l&neas de salida dos " tres < 00 fin del m%todo Me"*ressed public #oid Fe,6eleased. Ie,E#ent e#ento ) 00 mane-a el evento de liberar cual uier tecla linea7 3 1tring.format( 6Cecla liberada+ Ks6! evento.getSe"Ce,t( evento.getSe"Aode(' ' '$ 00 imprime la tecla liberada establecer#ineas8"B( evento '$ 00 establece las l&neas de salida dos " tres < 00 fin del m%todo Me"@eleased public #oid Fe,5,ped. Ie,E#ent e#ento ) 00 mane-a el evento de oprimir una tecla de accin linea7 3 1tring.format( 6Cecla oprimida+ Ks6! evento.getSe"A4ar(' '$ establecer#ineas8"B( evento '$ 00 establece las l&neas de salida dos " tres < 00 fin del m%todo Me"C"ped pri#ate #oid establecer4ineas2,1. Ie,E#ent e#ento ) - 00 establece las l&neas de salida dos " tres linea8 3 1tring.format( 6)sta tecla Ks es una tecla de accion6! ( evento.isActionSe"(' P 66 + 6no 6 ' '$ 1tring temp 3 evento.getSe":odifiersCe,t( evento.get:odifiers(' '$ lineaB 3 1tring.format( 6Ceclas modificadoras oprimidas+ Ks6! ( temp.e uals( 66 ' P 6ninguna6 + temp ' '$ 00 imprime modificadoras areaCe,to.setCe,t( 1tring.format( 6KsXnKsXnKsXn6! linea7! linea8! lineaB ' '$ 00 imprime tres l&neas de te,to < 00 fin del m%todo establecer#ineas8"B < 00 fin de la clase :arco5emoCeclas

// *ig. 11.1@: 'emo5eclas."a#a import -ava,.s.ing.(=rame$

Prueba de )arco'emo5eclas.

public class 'emo5eclas public static #oid main. (tring args/0 ) :arco5emoCeclas marco5emoCeclas 3 ne. :arco5emoCeclas('$ marco5emoCeclas.set5efaultAlose/peration( (=rame.)FIC;/2;A#/1) '$ marco5emoCeclas.set1ize( BHJ! 7JJ '$ 00 establece el tama?o del marco marco5emoCeclas.set>isible( true '$ 00 muestra el marco < 00 fin de main < 00 fin de la clase 5emoCeclas

11.1@ 8dministradores de es%uemas #os administradores de es uemas ordenan los componentes de la GUI en un contenedor! para fines de
presentacin. Codos los administradores de es uemas implementan la interfaz 4a,out)anager (pa uete "a#a.awt'. )l m%todo set4a,out de la clase Container especifica el es uema de un contenedor. *low4a,out es el administrador de es uemas ms simple. #os componentes de la GUI se colocan en un contenedor! de iz uierda a derec4a! en el orden en el ue se agregaron al contenedor. Auando se llega al borde del contenedor! los componentes siguen mostrndose en la siguiente l&nea. #a clase *low4a,out permite a los componentes de la GUI alinearse a la iz uierda! al centro (el valor predeterminado' " a la derec4a. )l m%todo set8lignment de *low4a,out cambia la alineacin para un ob-eto *low4a,out. )l administrador de es uemas Border4a,out (el predeterminado para un ob-eto *rame' ordena los componentes en cinco regiones+ 2/@CD! 1/UCD! )A1C! U)1C " A)2C)@. 2/@CD corresponde a la parte superior del contenedor. Un Border4a,out limita a un ob-eto Container para ue contenga cuando muc4o cinco componentes$ uno en cada regin. )l administrador de es uemas Grid4a,out divide el contenedor en una cuadr&cula! de manera ue los componentes puedan colocarse en filas " columnas. )l m%todo #alidate de Container recalcula el es uema del contenedor! con base en el administrador de es uemas actual para ese ob-eto Container " el con-unto actual de componentes de la GUI ue se muestran en pantalla.

11.1@.1 FlowLayout

// *ig. 11.1C: )arco*low4a,out."a#a import -ava.a.t.=lo.#a"out$ import -ava.a.t.Aontainer$ import -ava.a.t.event.Action#istener$ import -ava.a.t.event.Action)vent$ import -ava,.s.ing.(=rame$ import -ava,.s.ing.(Eutton$

'emostracin de las alineaciones de *low4a,out.

public class )arco*low4a,out e$tends *rame private (Eutton boton(EuttonIz uierda$ 00 botn para establecer la alineacin a la iz uierda private (Eutton boton(EuttonAentro$ 00 botn para establecer la alineacin al centro private (Eutton boton(Eutton5erec4a$ 00 botn para establecer la alineacin a la derec4a private =lo.#a"out es uema$ 00 ob-eto es uema private Aontainer contenedor$ 00 contenedor para establecer el es uema 00 establece la GUI " registra los componentes de escuc4a de botones public )arco*low4a,out.) super( 65emostracion de =lo.#a"out6 '$ es uema 3 ne. =lo.#a"out('$ 00 crea ob-eto =lo.#a"out contenedor 3 getAontent*ane('$ 00 obtiene contenedor para es uema set#a"out( es uema '$ 00 establece el es uema del marco 00 establece boton(EuttonIz uierda " registra componente de escuc4a boton(EuttonIz uierda 3 ne. (Eutton( 6Iz uierda6 '$ 00 crea botn Iz uierda add( boton(EuttonIz uierda '$ 00 agrega botn Iz uierda al marco boton(EuttonIz uierda.addAction#istener( ne. Action#istener(' 00 clase interna annima N 00 procesa evento de boton(EuttonIz uierda public void action*erformed( Action)vent evento ' N es uema.setAlignment( =lo.#a"out.#)=C '$ 00 realinea los componentes ad-untos es uema.la"outAontainer( contenedor '$ < 00 fin del m%todo action*erformed < 00 fin de la clase interna annima '$ 00 fin de la llamada a addAction#istener

// *ig. 11.2D: 'emo*low4a,out."a#a Prueba )arco*low4a,out. import -ava,.s.ing.(=rame$ public class 'emo*low4a,out public static #oid main. (tring args/0 ) :arco=lo.#a"out marco=lo.#a"out 3 ne. :arco=lo.#a"out('$ marco=lo.#a"out.set5efaultAlose/peration( (=rame.)FIC;/2;A#/1) '$ marco=lo.#a"out.set1ize( BHJ! GH '$ 00 establece el tama?o del marco marco=lo.#a"out.set>isible( true '$ 00 muestra el marco < 00 fin de main < 00 fin de la clase 5emo=lo.#a"out

Figura 11.39 | FlowLayout permite a los componentes #luir a tra!$s de !arias l%neas. (Parte 1 de 2).

// *ig. 11.21: )arcoBorder4a,out."a#a import -ava.a.t.Eorder#a"out$ import -ava.a.t.event.Action#istener$ import -ava.a.t.event.Action)vent$ import -ava,.s.ing.(=rame$ import -ava,.s.ing.(Eutton$

'emostracin de Border4a,out.

public class )arcoBorder4a,out e$tends *rame implements 8ction4istener private (Eutton botonesQR$ 00 arreglo de botones para ocultar porciones private final 1tring nombresQR 3 N 6/cultar 2orte6! 6/cultar 1ur6! 6/cultar )ste6! 6/cultar /este6! 6/cultar Aentro6 <$ private Eorder#a"out es uema$ 00 ob-eto Eorder#a"out 00 establece la GUI " el mane-o de eventos public )arcoBorder4a,out.) super( 65emostracion de Eorder#a"out6 '$ es uema 3 ne. Eorder#a"out( H! H '$ 00 espacios de H p&,eles set#a"out( es uema '$ 00 establece el es uema del marco botones 3 ne. (EuttonQ nombres.lengt4 R$ 00 establece el tama?o del arreglo 00 crea ob-etos (Eutton " registra componentes de escuc4a para ellos for ( int cuenta 3 J$ cuenta Y nombres.lengt4$ cuenta99 ' N botonesQ cuenta R 3 ne. (Eutton( nombresQ cuenta R '$ botonesQ cuenta R.addAction#istener( t4is '$ < 00 fin de for

11.1@.2 Border4a,out

add( botonesQ J R! Eorder#a"out.2/@CD '$ 00 agrega botn al norte add( botonesQ 7 R! Eorder#a"out.1/UCD '$ 00 agrega botn al sur add( botonesQ 8 R! Eorder#a"out.)A1C '$ 00 agrega botn al este add( botonesQ B R! Eorder#a"out.U)1C '$ 00 agrega botn al oeste add( botonesQ O R! Eorder#a"out.A)2C)@ '$ 00 agrega botn al centro < 00 fin del constructor de :arcoEorder#a"out 00 mane-a los eventos de botn public #oid actionPer:ormed. 8ctionE#ent e#ento ) 00 comprueba el origen del evento " distribu"e el panel de contenido de manera acorde for ( (Eutton boton + botones ' N if ( evento.get1ource(' 33 boton ' boton.set>isible( false '$ 00 oculta el botn oprimido else boton.set>isible( true '$ 00 muestra los dems botones < 00 fin de for es uema.la"outAontainer( getAontent*ane(' '$ 00 distribu"e el panel de contenido < 00 fin del m%todo action*erformed < 00 fin de la clase :arcoEorder#a"out

Figura 11.41 | BorderLayout que contiene cinco botones (Parte 1 de 2).

Figura 11.41 | BorderLayout que contiene cinco botones (Parte 2 de 2).

// *ig. 11.22: 'emoBorder4a,out."a#a import -ava,.s.ing.(=rame$

Prueba de )arcoBorder4a,out.

public class 'emoBorder4a,out public static #oid main. (tring args/0 ) :arcoEorder#a"out marcoEorder#a"out 3 ne. :arcoEorder#a"out('$ marcoEorder#a"out.set5efaultAlose/peration( (=rame.)FIC;/2;A#/1) '$ marcoEorder#a"out.set1ize( BGH! 8JJ '$ 00 establece el tama?o del marco marcoEorder#a"out.set>isible( true '$ 00 muestra el marco < 00 fin de main < 00 fin de la clase 5emoEorder#a"out

11.1@.1 Grid4a,out

// *ig. 11.21: )arcoGrid4a,out."a#a import -ava.a.t.Grid#a"out$ import -ava.a.t.Aontainer$ import -ava.a.t.event.Action#istener$ import -ava.a.t.event.Action)vent$ import -ava,.s.ing.(=rame$ import -ava,.s.ing.(Eutton$

'emostracin de Grid4a,out.

public class )arcoGrid4a,out e$tends *rame implements 8ction4istener private (Eutton botonesQR$ 00 arreglo de botones private final 1tring nombresQR 3 N 6uno6! 6dos6! 6tres6! 6cuatro6! 6cinco6! 6seis6 <$ private boolean alternar 3 true$ 00 alterna entre dos es uemas private Aontainer contenedor$ 00 contenedor del marco private Grid#a"out cuadricula7$ 00 primer ob-eto Grid#a"out private Grid#a"out cuadricula8$ 00 segundo ob-eto Grid#a"out 00 constructor sin argumentos public )arcoGrid4a,out.) super( 65emostracion de Grid#a"out6 '$ cuadricula7 3 ne. Grid#a"out( 8! B! H! H '$ 00 8 por B$ espacios de H cuadricula8 3 ne. Grid#a"out( B! 8 '$ 00 B por 8$ sin espacios contenedor 3 getAontent*ane('$ 00 obtiene el panel de contenido set#a"out( cuadricula7 '$ 00 establece es uema de ob-eto (=rame botones 3 ne. (EuttonQ nombres.lengt4 R$ 00 crea arreglo de ob-etos (Eutton :or . int cuenta J DK cuenta L nombres.lengt&K cuentaMM ) botonesQ cuenta R 3 ne. (Eutton( nombresQ cuenta R '$ botonesQ cuenta R.addAction#istener( t4is '$ 00 registra componente de escuc4a add( botonesQ cuenta R '$ 00 agrega boton a ob-eto (=rame < 00 fin de for < 00 fin del constructor de :arcoGrid#a"out 00 mane-a eventos de boton! alternando entre los es uemas public #oid actionPer:ormed. 8ctionE#ent e#ento ) if ( alternar ' contenedor.set#a"out( cuadricula8 '$ 00 establece es uema al primero else contenedor.set#a"out( cuadricula7 '$ 00 establece es uema al segundo alternar 3 Zalternar$ 00 establece alternar a su valor opuesto contenedor.validate('$ 00 redistribu"e el contenedor < 00 fin del m%todo action*erformed < 00 fin de la clase :arcoGrid#a"out

// *ig. 11.22: 'emoGrid4a,out."a#a import -ava,.s.ing.(=rame$

Prueba de )arcoGrid4a,out.

public class 'emoGrid4a,out public static #oid main. (tring args/0 ) :arcoGrid#a"out marcoGrid#a"out 3 ne. :arcoGrid#a"out('$ marcoGrid#a"out.set5efaultAlose/peration( (=rame.)FIC;/2;A#/1) '$ marcoGrid#a"out.set1ize( BJJ! 8JJ '$ 00 establece el tama?o del marco marcoGrid#a"out.set>isible( true '$ 00 muestra el marco < 00 fin de main < 00 fin de la clase 5emoGrid#a"out

11.1E Uso de paneles para administrar es%uemas m3s comple"os


#as GUIs comple-as (como la de la fi gura 77.7' re uieren ue cada componente se colo ue en una ubicacin e,acta. A menudo consisten de varios paneles! en donde los componentes de cada panel se ordenan en un es uema espec&fico. #a clase Panel e,tiende a Component! " Component e,tiende a la clase Container! por lo ue todo Panel es un Container. *or lo tanto! todo ob-eto (*anel puede tener componentes! inclu"endo otros paneles! los cuales se ad-untan mediante el m%todo add de Container. #a aplicacin de las fi guras 77.OH " 77.O[ demuestra cmo puede usarse un ob-eto (*anel para crear un es uema ms comple-o! en el cual se colo uen varios ob-etos (Eutton en la regin 1/UCD de un es uema Border4a,out. Una vez declarado el ob-eto Panel llamado panelBotones en la l&nea 77! " creado en la l&nea 7\! en la l&nea 8J se establece el es uema de panelBotones en Grid4a,out con una fi la " cinco columnas (4a" cinco ob-etos Button en el arreglo botones'. )n las l&neas 8B a 8G se agregan los cinco ob-etos Button del arreglo botones al ob-eto Panel en el ciclo. )n la l&nea 8[ se agregan los botones directamente al ob-eto Panel (la clase Panel no tiene un panel de contenido! a diferencia de *rame'. )n la l&nea 8\ se utiliza el ob-eto Border4a,out predeterminado para agregar panelBotones a la regin 1/UCD. /bserve ue esta regin tiene la misma altura ue los botones en panelBotones. Un ob-eto Panel a-usta su tama?o de acuerdo con los componentes ue contiene. A medida ue se agregan ms componentes! el ob-eto Panel crece (de acuerdo con las restricciones de su administrador de es uemas' para dar cabida a esos nuevos componentes. A-uste el tama?o de la ventana para ue vea cmo el administrador de es uemas afecta al tama?o de los ob-etos Button.

// *ig. 11.21: )arcoPanel."a#a Uso de un ob"eto Panel para a,udar a distribuir los componentes. import -ava.a.t.Grid#a"out$ import -ava.a.t.Eorder#a"out$ import -ava,.s.ing.(=rame$ import -ava,.s.ing.(*anel$ import -ava,.s.ing.(Eutton$ public class )arcoPanel e$tends *rame private (*anel panelEotones$ 00 panel ue contiene los botones private (Eutton botonesQR$ 00 arreglo de botones 00 constructor sin argumentos public )arcoPanel.) super( 65emostracion de *anel6 '$ botones 3 ne. (EuttonQ H R$ 00 crea el arreglo botones panelEotones 3 ne. (*anel('$ 00 establece el panel panelEotones.set#a"out( ne. Grid#a"out( 7! botones.lengt4 ' '$ 00 crea " agrega los botones :or . int cuenta J DK cuenta L botones.lengt&K cuentaMM ) botonesQ cuenta R 3 ne. (Eutton( 6Eoton 6 9 ( cuenta 9 7 ' '$ panelEotones.add( botonesQ cuenta R '$ 00 agrega el botn al panel < 00 fin de for add( panelEotones! Eorder#a"out.1/UCD '$ 00 agrega el panel a (=rame < 00 fin del constructor de :arco*anel < 00 fin de la clase :arco*anel

// *ig. 11.22: 'emoPanel."a#a Prueba de )arcoPanel. import -ava,.s.ing.(=rame$ public class 'emoPanel e$tends *rame public static #oid main. (tring args/0 ) :arco*anel marco*anel 3 ne. :arco*anel('$ marco*anel.set5efaultAlose/peration( (=rame.)FIC;/2;A#/1) '$ marco*anel.set1ize( OHJ! 8JJ '$ 00 establece el tama?o del marco marco*anel.set>isible( true '$ 00 muestra el marco < 00 fin de main < 00 fin de la clase 5emo*anel

11.1C 5e$t8rea Un ob-eto 5e$t8rea proporciona un rea para manipular varias l&neas de te,to.

5e$t8rea es una subclase de 5e$tComponent! la cual declara m%todos comunes para ob-etos 5e$t*ield! 5e$t8rea " varios otros componentes de GUI basados en te,to. #a clase Eo, es una subclase de Container ue utiliza un administrador de es uemas Bo$4a,out para ordenar los componentes de la GUI! "a sea en forma 4orizontal o vertical. )l m%todo static create7ori+ontalBo$ de Eo, crea un ob-eto Eo, ue ordena los componentes de iz uierda a derec4a! en el orden en el ue se ad-untan. )l m%todo get(elected5e$t ( ue 4ereda 5e$t8rea de 5e$tComponent' devuelve el te,to seleccionado de un ob-eto 5e$t8rea. *odemos establecer las pol&ticas de las barras de desplazamiento 4orizontal " vertical de un ob-eto (crollPane al momento de crearlo. #os m%todos set7ori+ontal(crollBarPolic, " set9ertical(crollBarPolic, de (crollNPane pueden usarse para modificar las pol&ticas de las barras de desplazamiento en cual uier momento.

// *ig. 11.2@: )arco8rea5e$to."a#a 00 Aopia el te,to seleccionado de un rea de te,to a otra. import -ava.a.t.event.Action#istener$ import -ava.a.t.event.Action)vent$ import -ava,.s.ing.Eo,$ import -ava,.s.ing.(=rame$ import -ava,.s.ing.(Ce,tArea$ import -ava,.s.ing.(Eutton$ import -ava,.s.ing.(1croll*ane$ public class )arco8rea5e$to e$tends *rame private (Ce,tArea areaCe,to7$ 00 muestra cadena de demostracin private (Ce,tArea areaCe,to8$ 00 el te,to resaltado se copia a u& private (Eutton botonAopiar$ 00 inicia el copiado de te,to 00 constructor sin argumentos public )arco8rea5e$to.) N super( 65emostracion de (Ce,tArea6 '$ Eo, cuadro 3 Eo,.createDorizontalEo,('$ 00 crea un cuadro 1tring demo 3 6)sta es una cadena deXndemostracion paraXn6 9 6ilustrar como copiar te,toXnde un area de te,to a Xn6 9 6otra! usando unXnevento e,ternoXn6$ areaCe,to7 3 ne. (Ce,tArea( demo! 7J! 7H '$ 00 crea rea de te,to 7 cuadro.add( ne. (1croll*ane( areaCe,to7 ' '$ 00 agrega panel de desplazamiento botonAopiar 3 ne. (Eutton( 6Aopiar VVV6 '$ 00 crea botn para copiar cuadro.add( botonAopiar '$ 00 agrega botn de copia al cuadro botonAopiar.addAction#istener( ne. Action#istener(' 00 clase interna annima N 00 establece el te,to en areaCe,to8 con el te,to seleccionado de areaCe,to7 public void action*erformed( Action)vent evento ' N areaCe,to8.setCe,t( areaCe,to7.get1electedCe,t(' '$ < 00 fin del m%todo action*erformed < 00 fin de la clase interna annima '$ 00 fin de la llamada a addAction#istener areaCe,to8 3 ne. (Ce,tArea( 7J! 7H '$ 00 crea segunda rea de te,to areaCe,to8.set)ditable( false '$ 00 des4abilita edicin cuadro.add( ne. (1croll*ane( areaCe,to8 ' '$ 00 agrega panel de desplazamiento add( cuadro '$ 00 agrega cuadro al marco < 00 fin del constructor de :arcoAreaCe,to < 00 fin de la clase :arcoAreaCe,to

// *ig. 11.2E: 'emo8rea5e$to."a#a 00 Aopia el te,to seleccionado de un rea de te,to a otra. import -ava,.s.ing.(=rame$ public class 'emo8rea5e$to public static #oid main. (tring args/0 ) :arcoAreaCe,to marcoAreaCe,to 3 ne. :arcoAreaCe,to('$ marcoAreaCe,to.set5efaultAlose/peration( (=rame.)FIC;/2;A#/1) '$ marcoAreaCe,to.set1ize( O8H! 8JJ '$ 00 establece el tama?o del marco marcoAreaCe,to.set>isible( true '$ 00 muestra el marco < 00 fin de main < 00 fin de la clase 5emoAreaCe,to

Vous aimerez peut-être aussi