Un pequeo programa escrito en Java e incluido en una pgina HTML. Es
independiente del sistema operativo en el que funciona. Se puede utilizar un aplique para visualizar un teto que desfila en un rea espec!fica" o animaciones. #e$master.l%cos.es&glossar%& Un applet es un pequeo programa de aplicaci'n. (ntes de que eistiera la )orld )ide )e$" los programas incorporados de proceso de teto % di$u*o que ven!an con )indo#s se denomina$an a veces applets +accesorios,. En la -ed" usando Java" el lengua*e de programaci'n orientado a o$*etos" un applet es un pequeo programa que puede enviarse *unto con una pgina #e$ a un usuario. Los applets Java pueden e*ecutar animaciones interactivas" clculos inmediatos u otras tareas sencillas sin tener que enviar una solicitud del usuario al servidor. ###.gamarod.com.ar&recursos&glosario& .equea (plicaci'n, Un mini programa que puede ser descargado rpidamente % usado por cualquier ordenador equipado con un navegador capaz de e*ecutar Java/ o (ctive0. Las 1(pplets1 transportan su propio soft#are de e*ecuci'n. ###.sindicacion.net&diccionario2glosario&diccionario2a.3tm Pasos de Ejecucin de un Applet 4. El navegador carga el documento de HTML 5. El navegador carga las clases de applet 6. El navegador corre el applet Jerarqu!a de la 7lase (pplet La clase java.applet.Applet es realmente una subclase de java.awt.Panel. La jerarqua de las clases applet y AWT estn de la siguente manera: java.lang.Object 8 9//*ava.a#t.7omponent 8 9//*ava.a#t.7ontainer 8 9//*ava.a#t..anel 8 9//*ava.applet.(pplet Mtodos de la Clase Applet / init + , / start + , / stop + , / destro% + , / paint + , Ejemplo: import *ava.a#t.:; import *ava.applet.:; pu$lic class Hello)orld etends (pplet < pu$lic void paint +=rap3ics g, < g.dra#String +1Hello )orld>1" 5?"5?, ; @ @ EJEMPLO DE CONSTRUCCIN DE UNA APPLET A. Cdigo .ara crear una applet normalmente ser necesario importar al menos las $i$liotecas java.awt.* % la java.applet.*. La clase que represente a la applet se 3a de declarar como una su$clase de la clase Applet" para poder so$reescri$ir los mAtodos de la clase Applet. Siempre conviene so$reescri$ir al menos el mAtodo paint() que ser llamado por los navegadores que soporten applets para mostrarles por pantalla. Bamos a construir una applet denominada AppletDiagonal que simplemente di$u*e una l!nea diagonal. Un posi$le c'digo para esta applet ser!aC import *ava.a#t.:; import *ava.applet.:; pu$lic class (ppletDiagonal etends (pplet < pu$lic void paint+=rap3ics g, < g.set7olor+ 7olor.red ,; g.dra#Line+E" E" get)idt3+," getHeig3t+, ,; @ @ .asemos a comentar el funcionamiento de este c'digoC 4. El mAtodo paint() reci$e un o$*eto de la clase Graphics. La clase Graphics" incluida en el ()T" contiene mAtodos para mostrar varios tipos de grficos. 5. Mediante el mAtodo setColor() de la clase Graphics se esta$lece el color de primer plano a ro*o" que es uno de los colores predefinidos de la clase Color. 6. .or Fltimo" mediante drawLine() se di$u*a una l!nea dadas las coordenadas de su esquina superior izquierda % de la inferior derec3a. En este caso se indican la esquina superior izquierda de la applet mediante las coordenadas +0,0," % la esquina inferior derec3a se o$tiene mediante dos mAtodos de la clase Dimension + getWidth(), geteight() ,. B. Ejecucin .ara e*ecutar la applet" una vez compilado el fic3ero" se introduce la llamada a la applet en una pgina )e$ +por e*emplo AppletDiagonal.htm," introduciendo entre su c'digo HTML lo siguienteC Gapplet codeH1(ppletDiagonal.class1 #idt3H5EE 3eig3tH5EEI G&appletI 7uando se cargue esta pgina )e$ en un navegador compati$le con Java o mediante el visualizador de applets que viene con el JDJ +appletviewer, se ver algo comoC !magen "# Applet 1L!nea1 Se podr!a di$u*ar un rectngulo con cam$iar la l!nea de c'digo de drawLine() por otra que llamase al mAtodo draw$ect()C g.dra#-ect+4E" 4E" r.#idt3 K5E" r.3eig3t K5E,; Por favor, si usted tiene Creator !E "acer el #aller Mi Primer Applet C!A$E$ Q%E $E &'()CA' E' %' APP!E# !A C!A$E *+AP,&C$ En el lengua*e Java es posi$le di$u*ar en un aplique simplemente volviendo a definir el mAtodo paint. Este mAtodo se invoca automticamente por el sistema cuando la ventana que inclu%e el aplique pasa a un primer plano. .or lo tanto cada orden grfica al aplique se dar en el mAtodo paint del aplique. void paint +=rap3ics g, < && Di$u*o @ 7uando el aplique 3a%a di$u*ado % se quiera visualizar posi$les cam$ios" es posi$le invocar el mAtodo repaint+, o el mAtodo update+=rap3ics g, que $orra el rea en el que el aplique 3a di$u*ado % vuelve a invocar la paint. El mAtodo paint+=rap3ics g, no se puede invocar directamente. El aplique no s'lo tiene el mAtodo paint que se puede volver a definir" sino tam$iAn los o$*etos de tipo 7omponent" es decir" todos los =UL. .or lo tanto" para cam$iar el aspecto grfico de cualquier componente grfico" $asta con volver a definir el mAtodo paint. Entre todos los componentes est el %a citado lienzo so$re el que es posi$le di$u*ar. Es un o$*eto de la clase 7anvas. Los que estn acostum$rados a programar con otros lengua*es esperan que en la paint 3a%a un inicializador del device en el que se va a di$u*ar %" despuAs" una serie de instrucciones de tipo dra#Line" dra#Mo etc." sin em$argo" os tengo que decir que esto no siempre es verdad" es decir" que en los componentes % en los apliques no 3a% ningFn mAtodo grfico. Llegados a este punto" queda claro incluso que el parmetro g de tipo =rap3ics de la paint inclu%e los mAtodos grficos que Java puede utilizar % representar" por decirlo de alguna forma" el rea en el que se di$u*arn las primitivas. =rap3ics es una clase que no se puede incluir" sino que es reci$ida por la paint como parmetro. .or lo tanto se puede utilizar s'lo en ella % sus mAtodos sonC Mtodos -ue di.ujan figuras lineales dra#6D-ect + int " int %" int anc3o" int altura" $oolean so$resaliente, Este mAtodo di$u*a un rectngulo en las coordenadas 0"N con dimensiones (O7HP" (LTU-( con un $orde que da la apariencia de 6D" el parmetro SPM-ES(LLEOTE indica si el rectngulo so$resale de la pantalla o est 3acia adentro de la pantalla. dra#(rc+ int " int %" int anc3o" int altura" int anguloLnicial" int anguloQinal, Este mAtodo di$u*a un arco de circunferencia inscrito en el rectngulo descrito por las coordenadas 0"N % dimensiones (O7HP" (LTU-(" teniendo como ngulo de inicio +en seagesimal, al parmetro (O=ULPLOL7L(L % ngulo final relativo al de inicio al parmetro (O=ULPQLO(L. dra#Line+ int " int %" int 4" int %4 , Este mAtodo di$u*a un l!nea entre los puntos 0"N e 04"N4 dra#Pval+ int " int %" int anc3o" int altura , Este mAtodo di$u*a una elipse inscrita en el rectngulo descrito por las coordenadas 0"N % las dimensiones (O7HP % (LTU-(. dra#-ect+ int " int %" int anc3o" int altura , Este mAtodo di$u*a un rectngulo en las coordenadas 0"N con dimensiones (O7HP % (LTU-(. Mtodos -ue +ellenan /iguras Todos los mAtodos siguientes son equivalentes a los mAtodos que di$u*an figuras lineales" s'lo que en este caso rellenan el interior de las figurasC dra#Qill6D-ect+ int " int %" int delta" int delta%" $oolean so$resaliente , fill(rc+ int " int %" int anc3o" int altura" int anguloLnicial" int angulaQinal , fillPval+ int " int %" int delta" int delta% , fill-ect+ int " int %" int delta" int delta% , Todos los mAtodos mencionados anteriormente di$u*an las figuras o las rellenan usando el color por defecto de la instancia a la clase =rap3ics que se estA usando. Mtodos para 0i.ujar Poligonos a$stract void dra#.ol%gon+intRS .oints" intRS %.oints" int n.oints, void dra#.ol%gon+.ol%gon p, El primer caso" es necesario un vector de puntos "%. El Segundo 7aso es necesario un o$*eto .ol%gon +Ber E*emplo Lmgenes.*ava, Mtodo para &mprimir una Cadena a$stract void dra#String+String str" int " int %, Donde str es la cadena a imprimir en sentido 3orizontal a partir de la coordenada o punto "% Mtodo para mostrar &magenes Los o$*etos =rap3ics pueden mostrar imgenes a travAs del mAtodoC dra#Lmage+ Lmage img"int "int %"LmageP$server o$servador ,; Ha% que tener en cuenta que el mAtodo dra#Lmage+, necesita un o$*eto Lmage % un o$*eto LmageP$server. .odemos cargar una imagen desde un fic3ero de di$u*o +actualmente s'lo se soportan formatos =LQ % J.E=, con el mAtodo getLmage+,C Lmage img H getLmage+ getDocumentMase+,"1fic3ero.gif1 ,; La forma de invocar al mAtodo getLmage+, es indicando un U-L donde se encuentre el fic3ero que contiene la imagen que queremos presentar % el nom$re de ese fic3eroC getLmage+ U-L directorioLmagen"String fic3eroLmagen ,; Un U-L comFn para el mAtodo getLmage+, es el directorio donde est el arc3ivo HTML. Se puede acceder a esa localizaci'n a travAs del mAtodo getDocumentMase+, de la clase (pplet" como %a se 3a indicado. Oormalmente" se realiza el getLmage+, en el mAtodo init+, del applet % se muestra la imagen cargada en el mAtodo paint+," tal como se muestra en el e*emplo siguienteC pu$lic void init+, < img H getLmage+ getDocumentMase+,"1pepe.gif1 ,; @ pu$lic void paint+ =rap3ics g , < g.dra#Lmage+ img""%"t3is ,; @ !A C!A$E COLOR Los colores primarios son el ro*o" el verde % el azul. Java utiliza un modelo de color denominado -=M" que significa que cualquier color se puede descri$ir dando las cantidades de ro*o +-ed," verde +=reen," % azul +Mlue,. Estas cantidades son nFmeros enteros comprendidos entre E % 5??" o $ien" nFmeros reales comprendidos entre E.E % 4.E. La siguiente ta$la nos proporciona los colores ms comunes % sus valores -=M. 'om.re +ed 1rojo2 *reen 1verde2 Blue 1a3ul2 #3ite 5?? 5?? 5?? lig3t=ra% 4T5 4T5 4T5 gra% 45U 45U 45U draV=ra% WX WX WX $lacV E E E red 5?? E E pinV 5?? 4Y? 4Y? orange 5?? 5EE E %ello# 5?? 5?? E green E 5?? E magenta 5?? E 5?? c%an E 5?? 5?? $lue E E 5?? .ara crear un o$*eto de la clase Color" se pasan tres nFmeros a su constructor que indican la cantidad de ro*o" verde % azul. 7olor color-osaHne# 7olor+5??" 4Y?" 4Y?,; Mediante la funci'n setColor" cam$iamos color con el que di$u*amos una l!nea" un teto o rellenamos una figura cerrada en el conteto grfico g. g.set7olor+color-osa,; Oo es necesario tener a mano la ta$la de las componentes -=M de cada color. La clase Color nos proporciona un con*unto de colores predefinidos en forma de miem$ros estticos de dic3a clase. .odemos escri$ir alternativamente g.set7olor+7olor.pinV,; Los colores predefinidos son los siguientes Color.white Color.%lac& Color.'ellow Color.lightGra' Color.red Color.green Color.gra' Color.pin& Color.magenta Color.dar&Gra' Color.orange Color.c'an Color.%l(e
El color de fondo de un componente se esta$lece con set)ac&gro(nd % se o$tiene con get)ac&gro(nd. !A C!A$E FONT .ara crear una fuente de teto u o$*eto de la clase *ont llamamos a su constructor" % le pasamos el nom$re de la fuente de teto" el estilo % el tamao. .or e*emplo" Qont fuenteHne# Qont+1Times-oman1" Qont.MPLD" 45,; Esta sentencia" crea una fuente de teto Times -oman" en letra negrita" de 45 puntos. Los estilos vienen datos por constantes +miem$ros estticos de la clase *ont," *ont.)+LD esta$lece el estilo negrita" *ont.!,AL!C" el estilo cursiva" % *ont.-LA!." el estilo normal. Se pueden com$inar las constantes *ont.)+LD/*ont.!,AL!C para esta$lecer el estilo negrita % cursiva a la vez. La funci'n set*ont de la clase Graphics esta$lece la fuente de teto en el conteto grfico g. g.setQont+fuente,; La funci'n get*ont o$tiene la fuente de teto actual de dic3o conteto grfico. La funci'n draw0tring di$u*a el string guardado en el o$*eto te1to de la clase 0tring" % lo sitFa en la posici'n cu%as coordenadas vienen dadas por los dos nFmeros enteros que le siguen. En la siguiente porci'n de c'digo" esta$lecemos una fuente de teto" di$u*amos el teto" % reesta$lecemos la fuente de teto por defecto" una operaci'n 3a$itual que se realiza al programar un applet. Qont oldQontHgetQont+,; Qont fuenteHne# Qont+1Monospaced1" Qont.MPLD" 6W,; g.setQont+fuente,; g.dra#String+teto" 4EE" ?E,; g.setQont+oldQont,; g.dra#String+otroTeto" 4EE" YE,; .ara o$tener el nom$re de las fuentes de teto disponi$les se escri$e el siguiente c'digo StringRS nom$reQuentesHgetToolVit+,.getQontList+,; for+int iHE; iGnom$reQuentes.lengt3; i99,< S%stem.out.println+nom$reQuentesRiS,; @ E*emplos donde se integran las clases /ont, Color 4 *rap"icsC import *ava.a#t.:; import *ava.applet.:; import *ava.util.:; pu$lic class Oeon etends (pplet < int r"v"a"i; -andom -Hne# -andom+,; pu$lic void init+, < setSize+UEE"WEE,; @ pu$lic void paint+=rap3ics g, < rHMat3.a$s+-.netLnt+,Z5?W9E,; vHMat3.a$s+-.netLnt+,Z5?W9E,; aHMat3.a$s+-.netLnt+,Z5?W9E,; 7olor coloresHne# 7olor+r" v" a,; g.set7olor+colores,; g.setQont+ne# Qont+1(rial1" Qont.MPLD" 5U,,; g.dra#String+1.-P=-(M(7LPO LEO=U(JE J(B(1" ?E" WE ,; for+iH4;iGH6EEEEEE;i99,; repaint+,; @ @ import *ava.a#t.:; import *ava.applet.:; pu$lic class Lmagenes etends (pplet < .ol%gon .Hne# .ol%gon+,; pu$lic void init+, < ..add.oint+5EE"X?E,; ..add.oint+XEE"5?E,; ..add.oint+WEE"X?E,; resize+UEE"WEE,; @ pu$lic void paint+=rap3ics g, < g.set7olor+7olor.orange,; g.setQont+ne# Qont+1(rial1"Qont.MPLD"6E,,; g.dra#String+1LM(=EOES>1" 5UE" WE ,; g.set7olor+7olor.$lue,; g.setQont+ne# Qont+1(rial1"Qont.MPLD"4X,,; g.dra#String+1-E7T(O=ULP ([UL>1" ?E" 4EE,; g.dra#-ect+Y?"45E"?E"?E,; g.set7olor+7olor.green,; g.dra#String+1-E7T(O=ULP -ELLEOP BE-DE1" 5?E" 4EE,; g.fill-ect+5Y?"45E"?E"?E,; g.set7olor+7olor.$lue,; g.dra#String+17L-7ULP -ELLEOP ([UL1" ??E" 4EE,; g.fillPval+?Y?"45E"?E"?E,; g.set7olor+7olor.c%an,; g.dra#String+1T-L(O=ULP -ELLEOP 7N(O1" 6EE" 56E,; g.fill.ol%gon+.,; @ @ Q%E E$ %'A AP!&CAC&5' A (E'#A'A$ La aplicaci'n a ventanas es el tipo de aplicaci'n que ms a menudo utilizamos cuando tra$a*amos con el ordenador. Es una aplicaci'n que se pone en marc3a de forma local" que utiliza como interfaz del usuario las tecnolog!as de las ventanas t!pica de los sistemas operativos Mac PS +en la que naci'," )indo#s +todas sus variantes" )indo#s 6.4" )indo#s T?" T?/ PS-5" TU" OT" 5EEE % Millenium," 0)indo#s +el servidor grfico para Linu % Uni,. 7asi todos los programas que se utilizan actualmente son aplicaciones a ventanas. Lo son" por e*emplo" )ord" Oetscape" Eplorer" J$uilder" Bisual Studio" )in[ip" .aint" 0B" etc\ +Todos pertenecen a los correspondientes productores,. .or lo tanto c'mo se crea una Bentana usando el paquete ()T. 7omo siempre creamos una aplicaci'n con el main.. Sin em$argo" la clase que se crea a3ora ampliar la clase *ava.a#t.Qrame" que representa la ventana completa" inclu%e el t!tulo" los pulsantes de reducci'n a icono" maimizar % cerrar. La clase Qrame tiene varios mAtodos % constructores que se vern ms adelante. (3ora se va a crear la primera ventana con el t!tulo .rimera Bentana % que no inclu%e nada. La editamos en Bentana.*ava. import java.awt.*2 p(%lic class 3entana e1tends *rame 4 p(%lic 3entana() 4 s(per(5-rimera 3entana5)2 setLocation("00,"00)2 set0i6e(700,"00)2 show()2 8 p(%lic static void main(0tring9: arg) 4 new 3entana()2 0'stem.o(t.println(5he creado la ventana5)2 8 8 (l principio" como para cada aplicaci'n" se invoca el main que crea un nuevo o$*eto de tipo Bentana. +El main % la ventana podr!an estar en dos arc3ivos separados" uno que gestiona el main" % el otro que gestiona la ventana,. En el constructor del o$*eto ventana se invoca al constructor de la superclase" es decir" del frame" con la cadena 1.rimera Bentana1 +es el t!tulo,. Luego se invoca el mAtodo setLocation que declara la posici'n del ngulo derec3o en la parte que est arri$a de la ventana en el desVtop" en este caso G4EE" 4EEI +Son la % la % respectivamente. La se mide partiendo del lado izquierdo de la pantalla % aumenta a medida que se va 3acia la derec3a. La % se mide partiendo de la parte superior de la pantalla % aumenta a medida que se va 3acia a$a*o,. DespuAs se invoca el mAtodo setSize que permite especificar anc3ura % altura. En nuestro caso" tiene una anc3ura de 5EE % una altura de 4EE. Qinalmente se invoca el mAtodo s3o#+, % a continuaci'n aparece la ventana en la pantalla. Las coordenadas de la pantalla no son las coordenadas cartesianas" realmente % es precisamente opuesta porque aumenta a medida de que se $a*a % desminu%e a medida de que se su$e. ]ste es un pro$lema que tiene no s'lo Java" sino que todos los lengua*es de programaci'n % todas las $i$liotecas para la grfica -aster. Se de$e a razones 3ist'ricas" supongo" de$idas a la forma de di$u*ar los piel en pantalla a nivel de 3ard#are. Ha% que acostum$rarse" pero las primeras veces puede provocar pro$lemas de razonamiento. Los mAtodos setLocation" setSize % s3o#" colocan tam$iAn las ventanas en distintas posiciones % evalFan los cam$ios. (dems no es verdad que a una aplicaci'n se puede asociar a una solo ventana. Java es un lengua*e que permite la multiprogramaci'n. 7ada ventana es un programa independiente que tra$a*a contemporaneamente con otros. .or eso puedo crear" para la misma aplicaci'n" ms ventanas Qrame" como en el e*emplo que se ofrece a continuaci'n. import java.awt.*2 p(%lic class 3entanas e1tends *rame 4 p(%lic 3entanas(0tring .om%re, ent 1, ent ') 4 s(per(.om%re)2 setLocation(1,')2 set0i6e(700,"00)2 show()2 8 p(%lic static void main(0tring9: arg) 4 0'stem.o(t.println(5Creo ; ventanas solapadas5)2 <or (ent e"2i=>2i//) new 3entanas(53entana 5e,"0/(e*"0), "0/(e*"0))2 0'stem.o(t.println(5Creo ; ventanas a c(adros5)2 <or (ent e?>2e=@2e//) new 3entanas(53entana 5/e,(eA>)*700, "00/(eA>))2 0'stem.o(t.println(5e creado las ocho ventanas5)2 8 8 Las mismas cosas se podBan hacer e1tendiendo la clase C*rame del paD(ete java1.swing. import java1.swing.*2 p(%lic class 3entana0wing e1tends C*rame 4 p(%lic 3entana0wing() 4 s(per(5-rimera 3entana5)2 setLocation("00,"00)2 set0i6e(700,"00)2 show()2 8 p(%lic static void main(0tring9: arg) 4 new 3entana0wing()2 0'stem.o(t.println(5e creado la ventana5)2 8 8 Este programa es como Bentana.*ava. lo Fnico que ampl!a JQrame de s#ing. Las Fnicas diferencias son el contenido de la ventana" que esta vez es gris % antes era $lanco" % el pulsador cerrar" que esta vez cierra la ventana +s'lo la ventana % no toda la aplicaci'n,. -ealmente la utilizaci'n de s#ing % de a#t es mu% parecida. Sin em$argo" s#ing es ms comple*o % pone a disposici'n muc3as ms clases" % ofrece la posi$ilidad de cam$iar el aspecto de las ventanas a runtime" etc. Desgraciadamente" no todos los #e$ $ro#ser las pueden utilizar. .or eso" nosotros veremos las a#t" % despuAs 3a$laremos de las s#ing" de*ando claro que los que quieran 3acer un aplique para su propria pgina 3tml 3asta a3ora TLEOEO que utilizar las a#t. Dentro de poco" cuando el 0ML se convierta en estndar % se tengan que cam$iar los $ro#ser" se podr utilizar con toda tranquilidad s#ing incluso para los apliques. .or lo tanto" vemos quA inclu%e la clase Qrame. En primer lugar" los constructores son dosC *rame() " que crea un Qrame sin ningFn t!tulo" al principio invisi$le. *rame(0tring ,)" que crea un Qrame con t!tulo T" tam$iAn inicialmente invisi$le. !os atri.utos de la clase son: static int L7POLQLED static int OP-M(L para indicar el estado de las ventanas % static int 7-PSSH(L-27U-SP- static int DEQ(ULT27U-SP- static int E2-ESL[E27U-SP- static int H(OD27U-SP- static int MPBE27U-SP- static int O2-ESL[E27U-SP- static int OE2-ESL[E27U-SP- static int O)2-ESL[E27U-SP- static int S2-ESL[E27U-SP- static int SE2-ESL[E27U-SP- static int S)2-ESL[E27U-SP- static int TE0T27U-SP- static int )2-ESL[E27U-SP- static int )(LT27U-SP- Todos se declaran como deprecated" para los cursores" remplazados por la clase 7ursor. Hereda la alineaci'n de los componentes de 7omponent. Los mAtodos sonC void add.oti<'()" conecta el frame a un recurso de la pantalla % lo convierte en visi$le. int getC(rsor,'pe()" declarado Deprecated. Es de la versi'n 4.4 de las JDJ static *rame9: get*rames()" da un arra% que inclu%e todos los Qrames creados por la aplicaci'n. !mage get!con!mage()" da el icono del Qrame. Es un o$*eto de tipo Lcon" que analizaremos a continuaci'n. Een()ar getEen()ar()" devuelve la $arra de los menFs del frame. Es un o$*eto de tipo MenuMar" que analizaremos a continuaci'n. int get0tate()" da el estado del frame. 0tring get,itle()" da el t!tulo del frame %oolean is$esi6a%le()" da verdadero si el frame se puede agrandar % reducir con el rat'n. protected 0tring param0tring() " da la cadena que inclu%e los parmetros del Qrame. void remove(Een(Component m)" quita el MenuMar especificado por el frame. void remove.oti<'()" quita la conei'n entre el frame % el recurso que representa la pantalla" convirtiAndolo en algo que no se puede visualizar. void setC(rsor(int c(rsor,'pe)" controla el cursor en JDJ4.4. Se declara deprecated. void set!con!mage(!mage image)" averigua el icono del Qrame. void setEen()ar(Een()ar m%)" asigna una MenuMar al frame. void set$esi6a%le(%oolean resi6a%le)" averigua el Qrame que puede cam$iar dimensiones o no. .or default lo es. void set0tate(int state)" averigua el estado del frame void set,itle(0tring title)" averigua el t!tulo del frame. Qrame es una clase que ampl!a *ava.a#t.)indo# %" por eso" 3ereda los mAtodos % los atri$utos. -ealmente Qrame es una )indo# que aade un $orde % un MenuMar. Los mAtodos 3eredados de #indo#s sonC addWindowListener, appl'$eso(rce)(ndle, appl'$eso(rce)(ndle, dispose, get*oc(s+wner, get!np(tConte1t, getLocale, get+wnedWindows, get+wner, get,ool&it, getWarning0tring, is0howing, pac&, postFvent, processFvent, processWindowFvent, removeWindowListener, show, to)ac&, to*ront. Window amplBa java.awt.Container" es un contenedor de o$*etos ()T. Es un componente que puede incluir otros componentes. .or lo tanto" por la propiedad de la transitividad" Qrame 3ereda los mAtodos % los atri$utos. Los mAtodos sonC add, add, add, add, add, addContainerListener, add!mpl, co(ntComponents, deliverFvent, doLa'o(t, <indComponentAt, <indComponentAt, getAlignmentG, getAlignmentH, getComponent, getComponentAt, getComponentAt, getComponentCo(nt, getComponents, get!nsets, getLa'o(t, getEa1im(m0i6e, getEinim(m0i6e, get-re<erred0i6e, insets, invalidate, isAncestor+<, la'o(t, list, list, locate, minim(m0i6e, paint, paintComponents, pre<erred0i6e, print, printComponents, processContainerFvent, remove, remove, removeAll, removeContainerListener, set*ont, setLa'o(t, (pdate, validate, validate,ree 7ontainer ampl!a *ava.a#t.7omponent. Un 7omponent es un o$*eto que tiene una representaci'n grfica" por e*emplo un cursor ser una etensi'n de esta clase que ampl!a" a su vez" *ava.lang.P$*ect Los atri$utos 3eredados por 7omponent sonC )+,,+EIAL!G.EF.,, CF.,F$IAL!G.EF.,, LF*,IAL!G.EF.,, $!G,IAL!G.EF.,, ,+-IAL!G.EF., mientras los mAtodos 3eredados por 7omponent sonC action, add, addComponentListener, add*oc(sListener, add!np(tEethodListener, addJe'Listener, addEo(seListener, addEo(seEotionListener, add-ropert'ChangeListener, add-ropert'ChangeListener, %o(nds, chec&!mage, chec&!mage, coalesceFvents, contains, contains, create!mage, create!mage, disa%le, disa%leFvents, dispatchFvent, ena%le, ena%le, ena%leFvents, ena%le!np(tEethods, <ire-ropert'Change, get)ac&gro(nd, get)o(nds, get)o(nds, getColorEodel, getComponent+rientation, getC(rsor, getDrop,arget, get*ont, get*ontEetrics, get*oregro(nd, getGraphics, geteight, get!np(tEethod$eD(ests, getLocation, getLocation, getLocation+n0creen, get.ame, get-arent, get-eer, get0i6e, get0i6e, get,reeLoc&, getWidth, getG, getH, got*oc(s, handleFvent, has*oc(s, hide, imageKpdate, inside, isDispla'a%le, isDo(%le)(<<ered, isFna%led, is*oc(s,raversa%le, isLightweight, is+paD(e, is3alid, is3isi%le, &e'Down, &e'Kp, list, list, list, location, lost*oc(s, mo(seDown, mo(seDrag, mo(seFnter, mo(seF1it, mo(seEove, mo(seKp, move, ne1t*oc(s, paintAll, prepare!mage, prepare!mage, printAll, processComponentFvent, process*oc(sFvent, process!np(tEethodFvent, processJe'Fvent, processEo(seFvent, processEo(seEotionFvent, removeComponentListener, remove*oc(sListener, remove!np(tEethodListener, removeJe'Listener, removeEo(seListener, removeEo(seEotionListener, remove-ropert'ChangeListener, remove-ropert'ChangeListener, repaint, repaint, repaint, repaint, reD(est*oc(s, reshape, resi6e, resi6e, set)ac&gro(nd, set)o(nds, set)o(nds, setComponent+rientation, setC(rsor, setDrop,arget, setFna%led, set*oregro(nd, setLocale, setLocation, setLocation, set.ame, set0i6e, set0i6e, set3isi%le, show, si6e, to0tring, trans<er*oc(s Mientras que de P$*ect se 3eredan los mismos mAtodosC clone, eD(als, <inali6e, getClass, hashCode, noti<', noti<'All, wait, wait, wait
El diagrama de las etensiones de Qrame es el siguienteC Llegados a este punto" se entiende por quA es importante la etensi'n de las clases en Java. -ealmente en Qrame se pueden invocar todos los mAtodos que analizamos antes. En cam$io" el mAtodo de JQrame de s#ing esC .or lo tanto Jframe 3ereda todos lo mAtodos de Qrame porque deriva de Aste %" adems" crea otros. P+)*+AMA$ APP!E#$ 6 /+AME P+&ME+ P+)*+AMA. *E'E+A0)+ 0E !&'EA$ import *ava.a#t.:; import *ava.applet.:; import *ava.util.:; pu$lic class Molas etends (pplet < int i"c"c%"radio"limite; -andom rHne# -andom+,; static final int HP-2T(M(OP H 45EE; static final int BE-2T(M(OP H 45EE; Mutton nuevoHne# Mutton+1Las Molas1,; pu$lic void init+, < resize+ HP-2T(M(OP"BE-2T(M(OP ,; add+nuevo,; @ pu$lic void paint+=rap3ics g, < for+radioH5E;radioGH4EE;radio99, < g.set7olor+ne# 7olor+Mat3.a$s+r.netLnt+,Z5?W9E,,,; g.dra#Pval+?E"?E"radio"radio,; @ @ pu$lic $oolean mouseDo#n+ Event evt"int "int % , < repaint+,; return true; @ @ $E*%'0) P+)*+AMA. %$) 0E /+AME$ &:La 7lausula etends indica Herencia o sea la manera de generar una su$clase+clase etendida, a partir de una clase+Superclase,. (3ora" esto indica que podemos utilizar la clase etendida en donde era legar utilizar la Superclase. La colecci'n de mAtodos % varia$les como su comportamiento de una clase es lo que se conoce con el nom$re de contrato o compromiso. .or lo tanto cuando se etiende una clase se 3eredan los compromisos de la Super7lase La 7lase Qrame permite en pocas pala$ras poseer como una ventana+lienzo, para realizar di$u*os. 7uando se instancia un Qrame se e*ecuta automaticamente el m^todo .aint o sea no es necesaria invocarla. (dem s" el m^todo paint se invoca cada vez que se necesita repintar el eplorador" producto de una interacci_n del usuario" por e*emplo" Maimizar" Minimizar. Su parametro es o$*eto =rap3ics" que es como si fuese nuestro l piz. El MAtodo -epaint+repintar, se utiliza para llamar el metodo .aint. El MAtodo -esize+, cam$ia el tama`o de un componente o frame. El MAtodo MouseDo#n+, es un o$servador" o sea un programa" que es disparado por un evento; en este caso un evento del Mouse. :& import *ava.a#t.:; pu$lic class 7uadrados etends Qrame < float ("%("M"%M"7"%7"D"%D; float (4"%(4"M4"%M4"74"%74"D4"%D4; float p"q"r; int centro"%centro; static final int HP-2T(M(OP H 6EE; static final int BE-2T(M(OP H 6EE; pu$lic 7uadrados+, < q H +float,E.E?; p H 4 / q; r H +float,E.T? : + HP-2T(M(OP&5 ,; centro H HP-2T(M(OP & 5; %centro H BE-2T(M(OP & 5; resize+ HP-2T(M(OP"BE-2T(M(OP ,; s3o#+,; @ pu$lic void paint+ =rap3ics g , < ( H D H centro / r; M H 7 H centro 9 r; %( H %M H %centro / r; %7 H %D H %centro 9 r; for+ int iHE; i G 5E; i99 , < g.dra#Line+ +int,("+int,%("+int,M"+int,%M ,; g.dra#Line+ +int,M"+int,%M"+int,7"+int,%7 ,; g.dra#Line+ +int,7"+int,%7"+int,D"+int,%D ,; g.dra#Line+ +int,D"+int,%D"+int,("+int,%( ,; (4 H p:( 9 q:M; %(4 H p:%( 9 q:%M; M4 H p:M 9 q:7; %M4 H p:%M 9 q:%7; 74 H p:7 9 q:D; %74 H p:%7 9 q:%D; D4 H p:D 9 q:(; %D4 H p:%D 9 q:%(; ( H (4; M H M4; 7 H 74; D H D4; %( H %(4; %M H %M4; %7 H %74; %D H %D4; @ @ pu$lic $oolean mouseDo#n+ Event evt"int "int % , < repaint+,; return true; @ pu$lic static void main+ String argsRS , < ne# 7uadrados+,; @ @ #E+CE+ P+)*+AMA. MA'E) 0E E(E'#)$ &:EBEOTPS Evento action+Event evt"P$*ect #3at,C (ccion Tomada Evento mouseDo#n+Event evt"int "int %,C .ulsacion del $oton del raton Evento mouseUp+Event evt"int "int %,C Li$eracion del $oton del raton Evento mouseMove+Event evt"int "int %,C Movimiento del raton Evento mouseDrag+Event evt"int "int %,C (rrastre del raton Evento mouseEnter+Event evt"int "int %,C Entrada del raton en un componente Evento mouseEit+Event evt"int "int %,C Salida del raton de un componente Evento Ve%Do#n+Event evt"int Ve%,C pulsacion de una tecla Evento Ve%Up+Event evt"int Ve%,C li$eracion de una tecla :& import *ava.a#t.:; import *ava.applet.:; pu$lic class Evento etends (pplet < Mutton amigo; pu$lic void init+, < amigoHne# Mutton+1 $oton 1,; add+amigo,; @ pu$lic $oolean action+Event evt"P$*ect #3at, < if+evt.targetHHamigo, < amigo.setLa$el+1 action 1,; return true; @ else return false; @ pu$lic $oolean mouseDo#n+Event evt"int "int %, < amigo.setLa$el+1 mouseDo#n 1,; return true; @ pu$lic $oolean Ve%Do#n+Event evt"int Ve%, < amigo.setLa$el+1 tecla1 ,; return true; @ pu$lic $oolean mouseEnter+Event evt"int "int %, < amigo.setLa$el+1so$re el1,; return true; @ @ C%A+#) P+)*+AMA. *E'E+A0)+ 0E !&'EA$ &: Los (dministradores de diseo son clases que a%udan a u$icar componentes dentro de una Bentana (pplet SetLa%out. Esta$lece el tipo de administrador de diseo. Qlo#La%out. Se utiliza para colocar los componentes dentro de un panel de componentes "adems" los u$ica en el mismo orden en el cual se agregan. la sentencia Qlo#La%out+ Qlo#La%out.7EOTE-"E"E ," indica como se alinea el componente en este caso centro % los dos siguientes parmetros los espacios tanto 3orizontal % vertical entre componentes MorderLa%out. Esta$lece la posici'n que puede u$icar los componentes de un panel. Oort3CSuperior"Sout3HSur"EastHLzquierda")estHDerec3a"7enterHcentro :& import *ava.a#t.:; import *ava.applet.(pplet; pu$lic class QigLinea etends (pplet < private TetQield tf4"tf%4"tf5"tf%5; pu$lic void init+, < setMacVground+ 7olor.#3ite,; setLa%out+ ne# MorderLa%out+, ,; .anel p H ne# .anel+,; p.setLa%out+ ne# Qlo#La%out+ Qlo#La%out.7EOTE-"E"E , ,; p.add+ ne# La$el+ 1dra#Line+ 1, ,; p.add+ tf4 H ne# TetQield+6, ,; p.add+ ne# La$el+ 1"1 , ,; p.add+ tf%4 H ne# TetQield+6, ,; p.add+ ne# La$el+ 1"1 , ,; p.add+ tf5 H ne# TetQield+6, ,; p.add+ ne# La$el+ 1"1, ,; p.add+ tf%5 H ne# TetQield+6, ,; p.add+ ne# La$el+ 1 ,1 , ,; add+ 1Oort31"p ,; && En la parte inferior colocamos un $ot'n para que cuando && lo pique el usuario se pinte la l!nea que corresponda a && los parmetros de los campos de teto p H ne# .anel+,; p.add+ ne# Mutton+ 1 .intar 1 , ,; add+ 1Sout31"p ,; tf4.setTet+ 14E1 ,;tf%4.setTet+ 14E1 ,;tf5.setTet+ 14EE1 ,;tf%5.setTet+ 14EE1 ,; @ && Este mAtodo se encarga de recoger los valores numAricos que && se introduzcan en los campos de teto. Si se meten letras && o cualquier cosa rara" toma como valor E private int parseTetQield+ TetQield tf , < int n; tr% < n H Lnteger.parseLnt+ tf.getTet+, ,; @ catc3+ Oum$erQormatEception nfe , < tf.setTet+ 1E1 ,;n H E; @ return+ n ,; @ && So$recargamos el mAtodo de pintura de nuestra interface && Qigura" que como es la que implementa la clase Tut7anvas" && 3ar que nos aparezca en pantalla la imagen correspondiente && a la l!nea que indiquen los parmetros fi*ados pu$lic void paint+ =rap3ics g , < int 4 H parseTetQield+ tf4 ,; int %4 H parseTetQield+ tf%4 ,; int 5 H parseTetQield+ tf5 ,; int %5 H parseTetQield+ tf%5 ,; if+4>HE aa %4>HE aa 5>HE aa %5>HE, < g.set7olor+7olor.red,; g.dra#Line+ 4"%4"5"%5 ,; @ @ && 7ontrolamos el evento de repintado de la l!nea pu$lic $oolean action+ Event evt"P$*ect o$* , < if+ o$*.equals+ 1 .intar 1 , , < repaint+,; return+ true ,; @ return+ false ,; @ @ Q%&'#) P+)*+AMA. *E'E+A0)+ 0E !&'EA$ import *ava.a#t.:; import *ava.applet.(pplet; pu$lic class Qigura etends (pplet < private TetQield tf4"tf%4"tf5"tf%5; private Mutton nuevo; int 4"%4"5"%5; pu$lic void init+, < add+ ne# La$el+ 1dra#Line+ 1, ,; add+ tf4 H ne# TetQield+6, ,; add+ ne# La$el+ 1"1 , ,; add+ tf%4 H ne# TetQield+6, ,; add+ ne# La$el+ 1"1 , ,; add+ tf5 H ne# TetQield+6, ,; add+ ne# La$el+ 1"1, ,; add+ tf%5 H ne# TetQield+6, ,; add+ ne# La$el+ 1 ,1 , ,; nuevoHne# Mutton+1.intar1,; add+nuevo,; && En la parte Superior colocamos un $ot'n para que cuando && lo pique el usuario se pinte la l!nea que corresponda a && los parmetros de los campos de teto tf4.setTet+ 14E1 ,; tf%4.setTet+ 14E1 ,; tf5.setTet+ 14EE1 ,; tf%5.setTet+ 14EE1 ,; @ && Este mAtodo se encarga de recoger los valores numAricos que && se introduzcan en los campos de teto. Si se meten letras && o cualquier cosa rara" toma como valor E private int puntos+ TetQield tf , < int n; tr% < n H Lnteger.parseLnt+ tf.getTet+, ,; @ catc3+ Oum$erQormatEception nfe , < tf.setTet+ 1E1 ,; n H E; @ return+ n ,; @ pu$lic void paint+ =rap3ics g , < g.dra#Line+ 4"%4"5"%5 ,; @ && 7ontrolamos el evento de repintado de la l!nea pu$lic $oolean action+ Event evt"P$*ect o$* , < if+evt.targetHHnuevo, < 4 H puntos+tf4 ,; %4 H puntos+tf%4 ,; 5 H puntos+tf5 ,; %5 H puntos+tf%5 ,; if+4>HE aa %4>HE aa 5>HE aa %5>HE, repaint+,; return+ true ,; @ return+ false ,; @ @ $E7#) P+)*+AMA. $E!ECC&)'A0)+ 0E /&*%+A import *ava.a#t.:; import *ava.applet.(pplet; pu$lic class Qigura etends (pplet < private TetQield tf4"tf%4"tf5"tf%5; private Mutton nuevo; int 4"%4"5"%5; pu$lic void init+, < add+ ne# La$el+ 1dra#Line+ 1, ,; add+ tf4 H ne# TetQield+6, ,; add+ ne# La$el+ 1"1 , ,; add+ tf%4 H ne# TetQield+6, ,; add+ ne# La$el+ 1"1 , ,; add+ tf5 H ne# TetQield+6, ,; add+ ne# La$el+ 1"1, ,; add+ tf%5 H ne# TetQield+6, ,; add+ ne# La$el+ 1 ,1 , ,; nuevoHne# Mutton+1.intar1,; add+nuevo,; && En la parte Superior colocamos un $ot'n para que cuando && lo pique el usuario se pinte la l!nea que corresponda a && los parmetros de los campos de teto tf4.setTet+ 14E1 ,; tf%4.setTet+ 14E1 ,; tf5.setTet+ 14EE1 ,; tf%5.setTet+ 14EE1 ,; @ && Este mAtodo se encarga de recoger los valores numAricos que && se introduzcan en los campos de teto. Si se meten letras && o cualquier cosa rara" toma como valor E private int puntos+ TetQield tf , < int n; tr% < n H Lnteger.parseLnt+ tf.getTet+, ,; @ catc3+ Oum$erQormatEception nfe , < tf.setTet+ 1E1 ,; n H E; @ return+ n ,; @ pu$lic void paint+ =rap3ics g , < g.dra#Line+ 4"%4"5"%5 ,; @ && 7ontrolamos el evento de repintado de la l!nea pu$lic $oolean action+ Event evt"P$*ect o$* , < if+evt.targetHHnuevo, < 4 H puntos+tf4 ,; %4 H puntos+tf%4 ,; 5 H puntos+tf5 ,; %5 H puntos+tf%5 ,; if+4>HE aa %4>HE aa 5>HE aa %5>HE, repaint+,; return+ true ,; @ return+ false ,; @ @ $EP#&M) P+)*+AMA. CA+*A+ %'A &MA*E' import *ava.a#t.:; import *ava.applet.(pplet; pu$lic class Lmagen etends (pplet < Lmage pepe; && Toma la imagen de Disco pu$lic void init+, < pepe H getLmage+ getDocumentMase+,"1.epe.gif1 ,; @ && N la pinta en la pantalla" con un $orde de ? piels en la && parte superior e izquierda pu$lic void paint+ =rap3ics g , < g.dra#Lmage+ pepe"?"?"t3is ,; @ @ $EP#&M) P+)*+AMA. ,&$#)*+AMA BA$&C) import *ava.a#t.:; import *ava.applet.:; pu$lic class Marras etends (pplet < final int datosH45; final dou$le datosfH45.E; final int puntosHXEE; final dou$le puntosfHXEE.E; final dou$le grosorH5E.E; final int maH?EE; final dou$le mafH?EE.E; final dou$le minH4EE.E; final dou$le min%H4EE.E; final dou$le maH?EE.E; final dou$le ma%H?EE.E; final dou$le escalaHpuntosf&maf; dou$le dH+puntosf/+datosf:grosor,,&datosf; dou$le (RSHne# dou$leRdatosS; dou$le 3"%"; int i"d; pu$lic void init+, < setSize+WEE"WEE,; @ pu$lic void paint+=rap3ics g, < g.set7olor+7olor.-ED,; g.dra#Line+4EE"4EE"4EE"?EE,; g.dra#Line+4EE"?EE"?EE"?EE,; g.set7olor+7olor.)HLTE,; g.fill-ect+4E4"4EE"6TT"6TT,; Hd9min; g.set7olor+7olor.=-EEO,; for+iHE;iG(.lengt3;i99, < (RiSHMat3.random+,:puntosf; 3H(RiS:escala; %Hma%/3; g.fill-ect++int, "+int, %"+int,grosor"+int, 3,; H9grosor9d; @ @ @ )C#A() P+)*+AMA. ,&$#)*+AMA BA$&C) C)' %'A !&$#A 0E 0A#)$ import *ava.a#t.:; import *ava.applet.:; pu$lic class Marras4 etends (pplet < final int datosH45; final dou$le datosfH45.E; final int puntosHXEE; final dou$le puntosfHXEE.E; final dou$le grosorH5E.E; final int maH?EE; final dou$le mafH?EE.E; final dou$le minH4EE.E; final dou$le min%H4EE.E; final dou$le maH?EE.E; final dou$le ma%H?EE.E; final dou$le escalaHpuntosf&maf; dou$le dH+puntosf/+datosf:grosor,,&datosf; List LHne# List+,; dou$le 3"%"; int i"d; pu$lic void init+, < setSize+WEE"WEE,; for+iH4;iGHdatos;i99, L.addLtem+ne# String+,.valuePf+Mat3.random+,:maf,,; @ pu$lic void paint+=rap3ics g, < g.set7olor+7olor.-ED,; g.dra#Line+4EE"4EE"4EE"?EE,; g.dra#Line+4EE"?EE"?EE"?EE,; g.set7olor+7olor.)HLTE,; g.fill-ect+4E4"4EE"6TT"6TT,; Hd9min; g.set7olor+7olor.=-EEO,; for+iHE;iGdatos;i99, < 3HQloat.parseQloat+L.getLtem+i,,:escala; %Hma%/3; g.fill-ect++int, "+int, %"+int,grosor"+int, 3,; H9grosor9d; @ @ @ 0EC&M). ,&$#)*+AMA BA$&C) C)' !&$#A$ 0E 0A#)$ +E!AC&)'A0A$ import *ava.a#t.:; import *ava.applet.:; import *ava.a#t.event.:; pu$lic class Marras5 etends (pplet implements (ctionListener < List lista; final int datosH45; final dou$le datosfH45.E; final int puntosHXEE; final dou$le puntosfHXEE.E; final dou$le grosorH5E.E; final int maH?EE; final dou$le mafH?EE.E; final dou$le minH4EE.E; final dou$le min%H4EE.E; final dou$le maH?EE.E; final dou$le ma%H?EE.E; final dou$le escalaHpuntosf&maf; dou$le dH+puntosf/+datosf:grosor,,&datosf; List list4Hne# List+,; List list5Hne# List+,; List list6Hne# List+,; List listXHne# List+,; List list?Hne# List+,; dou$le 3"%"; int i"d"indiceHE; pu$lic void init+, < lista H ne# List+X" false,; for+iH4TTT;iGH5EE6;i99, lista.addLtem+ne# String+,.valuePf+i,,; setSize+WEE"WEE,; pasar+list4,; pasar+list5,; pasar+list6,; pasar+listX,; pasar+list?,; add+lista,; lista.add(ctionListener+t3is,; @ pu$lic void action.erformed +(ctionEvent ev, <
if +ev.getSource+,HHlista, indiceHlista.getSelectedLnde+,; repaint+,; @ pu$lic void pasar+List L, < L.clear+,; for+iH4;iGHdatos;i99, L.addLtem+ne# String+,.valuePf+Mat3.random+,:maf,,; @ pu$lic void paint+=rap3ics g, < g.set7olor+7olor.-ED,; g.dra#Line+4EE"4EE"4EE"?EE,; g.dra#Line+4EE"?EE"?EE"?EE,; g.set7olor+7olor.)HLTE,; g.fill-ect+4E4"4EE"6TT"6TT,; Hd9min; g.set7olor+7olor.=-EEO,; for+iHE;iGdatos;i99, < s#itc3+indice, < case 4C 3HQloat.parseQloat+list4.getLtem+i,,:escala; $reaV; case 5C 3HQloat.parseQloat+list5.getLtem+i,,:escala; $reaV; case 6C 3HQloat.parseQloat+list6.getLtem+i,,:escala; $reaV; case XC 3HQloat.parseQloat+listX.getLtem+i,,:escala; $reaV; case ?C 3HQloat.parseQloat+list?.getLtem+i,,:escala; $reaV; @ if+indice>HE, < @ %Hma%/3; g.fill-ect++int, "+int, %"+int,grosor"+int, 3,; H9grosor9d; @ @ @ ')(E') P+)*+AMA. ,&$#)*+AMA BA$&C) C)' A+C,&()$ C)' APP!E#$ Es necesario crear por $locV de notas arc3ivos con datos formatos reales separados por comas de la siguiente formaC 456.E" UT.?W" YU.E" 456.4" 5?6.5" X45.E % se de$en guardar como ao +por e*emplo 4TTU.tt,. (dems" los arc3ivos se de$en almacenar donde esta el arc3ivo class+ en esta caso MarrasX.class,. import *ava.a#t.:; import *ava.applet.:; import *ava.io.:; import *ava.util.StringToVenizer; pu$lic class MarrasX etends (pplet < final int puntosHXEE; final dou$le puntosfHXEE.E; final dou$le grosorH5E.E; final int maH?EE; final dou$le mafH?EE.E; final dou$le minH4EE.E; final dou$le min%H4EE.E; final dou$le maH?EE.E; final dou$le ma%H?EE.E; dou$le escala"d"datosf; Qile-eader arc3ivo; List ListaHne# List+,; List Lista4Hne# List+,; dou$le 3"%"; int i"d"datosHE; pu$lic void init+, < inicializa+,; setSize+WEE"WEE,; for+iH4TTT;iGH5EE6;i99, Lista.addLtem+ne# String+,.valuePf+i,,; add+Lista,; @ pu$lic void inicializa+, < escalaHpuntosf&maf; dH+puntosf/+datosf:grosor,,&datosf; @ pu$lic void $a*ar+String nomarc3, < Qile arc3Hne# Qile+nomarc3,; if+>arc3.eists+,, s3o#Status+1(rc3ivo 19nomarc391 no eiste1,; else < tr% < arc3ivoHne# Qile-eader+nomarc3,; @ catc3+QileOotQoundEception e,<@ StringMuffer MHne# StringMuffer+,; for+iH4;iGHarc3.lengt3+,;i99, tr% < M.append++c3ar, arc3ivo.read+,,; @ catc3+LPEception e,<@ StringToVenizer JHne# StringToVenizer+M.toString+,"1"1,; datosHJ.countToVens+,; Lista4.clear+,; #3ile+J.3asMoreToVens+,, Lista4.addLtem+J.netToVen+,,; @ @ pu$lic void paint+=rap3ics g, < g.set7olor+7olor.-ED,; g.dra#Line+4EE"4EE"4EE"?EE,; g.dra#Line+4EE"?EE"?EE"?EE,; g.set7olor+7olor.)HLTE,; g.fill-ect+4E4"4EE"6TT"6TT,; Hd9min; g.set7olor+7olor.=-EEO,; if+datos>HE, < datosfH+dou$le, datos; inicializa+,; for+iHE;iGdatos;i99, < 3HQloat.parseQloat+Lista4.getLtem+i,,:escala; %Hma%/3; g.fill-ect++int, "+int, %"+int,grosor"+int, 3,; H9grosor9d; @ @ @ pu$lic $oolean 3andleEvent +Event ev, < String S; s3o#Status+ne# String+,.valuePf+ev.id,,; if +ev.targetHHLista aa ev.idHHYE4, < SHLista.getLtem+Lista.getSelectedLnde+,,91.tt1; $a*ar+S,; repaint+,; @ return true; @