508

Cad enos y earacleres

Ccpilulo 11

Caracter A B
C

Codlgo

Caraclar T U V

Codlgo

12
Graficos y lava2D
• Comprcndcr
105

D E F G H

.. -.

W X
y

Z
Digitos

K L M N

-.-

2 4 5

.- ..

o
p

6
7 9

Q R S

contextos de graficos y los objetos de graficos.

• Comprcndcr y rnanipular los colores. • Comprender y rnanipular las fucntcs,
• Usar rnetodos de Graphics para dibujar lfneas, rectangulos,

o

Figura 11.33 Las lelras del olfabeto expresadas en c6dlgo Morse Internaclonal. Disene e lmplemcnte una aplicacion de correcckin ortognifica en Javu. Sa progruma debe mantener un arreglo de cadenas llamudo listaDePalabras. Permita al usuurio introducir estas cadenus. [Nola: En el capftulo 17 presentaremos el procesnmiento de urchivos. Una vez que tenga estu capacidad, podra obtener lui pulabras para el corrector ortognifico de un diccionario cornputarizado almacenado en un archivo.] Su programs debe pedir al usuurio que introduzcu una palabra. EI programa debe cntonces buscar esa palabra en cl urreglo listaDePalabras. Si In palabra se encuentra en el arreglo, su progrnrna debora imprimir "La palabra esta escrita correctamente". Si la palabra no sc cncuentra ell el arreglo, su progruma debe imprimir "La palabra no esta. escrita correctamente". Despuessu programa debe tratar de localizer otras palabrus en lu listaDePalabras que puedan ser la pulabra que cl usuario trataba de escribir. Por ejemplo, pucde probar con todus las transposiciones simples posibles de letras adyacentes purn descubrir que la pulabra "predeterrninado" concucrda dircctumente con una palabra en listaDePalabras. Desdeluego que esto implica que su programa comprobani todus hLI otras transposicioncs posibles, tales como "rpedeterminado", "perdetcnninudo", "predetrerninado", "predetemrinado" y "prcdetermniado", Cuando encuentre una nueva palabra que eoncuerde con una en la listaDePalabras, imprima esa pulabra en un rnensajctal como "I.Quiso usted decir "predeterminado"?", Implemente otras pruebas, tales como reempluzur cada letra doble con una sola letra y cualquier otra prueba que pueda desarrollar pam aumentar el valor de su corrector ortografico, 11.30 (Proyecto: utI generador de crllcigramas.) La muyorta de las personas han resuelto crucigramas, pero pecos hun intentado generar uno. Aqui 10 sugerimos como un proyecto de ruanipulacion de cadenas que requiere una cantidud considerable de sofisticacion y esfuerzo. Hay muchas cuestiones que el programador tiene que resolver para hacer que Iuncione incluso basta el programu generudor de cruclgramas nuis simple, Par ejemplo, i,c6mo representnrfa la cuadrfcula de un crucigrama dentro de la cornputudora? ~Deberia utilizar una serie de cadenas 0 arreglos bidimensionules? EI programador necesita una fuente de palabras (es decir, un diccionario computurizado) a Ius que el prograrna pueda haeer referencia de rnanera directs, ~De que manera deben almacenarse estas palabras para facilitur Ius cornplejas manipulaciones requeridas por el programs? Si usted es realmcnte umbicioso, querra generur ln porcion de "claves" del crucigrama, en In que se lrnprimen las breves pistas para cada pulubra "horizontal" y cada palnbra "vertical". La sola impresion del crucigrama en blnnco no es un problema sencillo.

rectsngulos con esqulnas redcndeadas, rectangulos tridimensionules, ovalos, arcos y poltgonos,
• Utilizur metodos de In clase Graphics2D

de In API Java2D para dibujur lineas, recuingulos, rcctangulos con esquinas redondeudas, elipses, arcos y rutas en general. y Stroke
de las liguras

• Especificar las caracterfsticas Paint moslradas can Graphics2D.

Ulla imagen vale mas que mil palabras. Proverbio chino Hay que tratar a la naturaleza en terminos del cilindto, de 10 .esfera, del cono, todo en perspective. Paul Cezanne Nada se vuelve real sino haste que se experimenta; inciliso un proverbio nu sera provetbio para usied, sino hasta que Sll vida 10 /iaya ilustrado. Keats Ulla imagen me muestra de un vistaza 10 que tequieie docenas de pdginas de lin libra para explican Ivan Sergeyevich Turgenev

510

Gr6ficos y Java2D

capRulo 12

Graficos y Java2D

511

12.1 lntrocuccicn
En cstc capitulo veremos vurias de las herrnmicntas de Java para dibujar figuras bidimcnsionalcs, controlar colorcs y fuentcs. Uno de los atractivos iniciales de Java era Sll sopone para graflcos, el cual pcrmitia a los programadcrcs de Java rnejorar la apuriencia visual de sus applets (subprogrumas) y sus aplicaciones, Ahora, Java contiene muchas mas herrarnientas sofisticadas de dibujo como parte de la API Javall). Comenzaremos este capitulo can una introduccion a rnuchns de las herramienras de dibujo originales de Java. Despues presentaremos vurias de las nuevas y mas poderosas herrnmientas de Java2D, como cl control del estilo de linens utilizadas para dibujar tigUI'US y el control del relleno de las figuras con colores y patroncs, En la figura 12.1 se rnucstrn una porcion de ln jerarquia de clases de Java que incluye vnrias de las clases de graficos basi ens y Ius clases e interfaces de la API Javal que cubriremos elleste capitulo. La clase Color conticne metodos y constuntes para munipular los colores, La clase Font contiene metodos y consrantes para manejnr los tipo» de letrus. La clase FontMetrics contienc metodos para obtener informacion sabre los tipes de letras, La clasc Polygon con tie no metodos para crear pollgonos. La clase Graphics contienc metedos para dibujur cadenas, lineas, rectaugulos y dernas figurus. La mitnd inferior de In figura mucstra varius clases e interfaces de la API Java2D. La clase BasicStroke ayuda a espccificar las caructerfsticas de dibu]o de las lfncas. Las clases GradientPaint y TexturePaint uyudan a especiflcar las caracteristicas para rellenar figuras con colores () patrones. Las clases GeneralPath, Arc2D,Ellipse2D, Line2D,Rectangle2D y RoundRectangle2D representan varias figuras de Java2D. Para ernpezar a dibujar en Java, prirnero debemos entender su sistema de coordenadas (Iiguru 12.2), el cual cs lin esquema para identificar a cad a uno de los posibles puntas en la pnntallu, De manera prcdeterminada, lu esquina superior izquierda de un cornponente de la GUI (como un applet 0 una ventana) tiene las coordenadas (D,O). Un par de coordenadus esta compuesto por una coordenuda x (la coordenoda noriunuat; y una coordenada y (la coottlenudu verticals. La coordcnuda x es la distancia horizontal que se des plaza lucia In derecha, desde 111squina superior izquierda. La coordenada y es la distancia vertical que se dcspluza hucia abujo, desde e In esquina superior izquierdu. EI eje x describe cudu una de las coordenadas horizontules, y el eje y describe cada una de las coordenudas vcrticnles, El texto y las figuras sc muesuun en la pantalla mediante la cspecificacion de coordenudas. Las unidades de coordenada se miden en pixeles. Un pixel es la unidad de resolucien mas pcqueiia de In pantnlla de un monitor de computudora, . La coordenada superior izquierda (0,0) de una ventnna se encucntra detrds de ln barrn de titulo de la ventuna. Par esta razon, las coordenudas de dibujo deben ajustarse para dibujar dentro de los bordes de la vcntana. La clase Container (una superclase de todas Ius ventunas en Java) tiene el metoda getInsets, e! cual devuelve un objeto Insets (puqueie java, awt) para este tin, Un objeto Insets ticne cuatro miernbros

Figura 12.1 Closes e Interfaces utllizodas en este capitulo. ptovenlentes de las herramlentas de graflcos originales de Java y de 10 API Java2D. (Nota: La clase Obj act aparece aquf porque es la superclase de 10 Jerarquia de closes de Java.) publi.c: top, bottom, left y right, los cuales representan eI mimero de pfxeles desde cada extreme de la ventuna hasta el area de dibujo pam la ventuna.

t8 les

JJm\1 Existen distimo:
1'''1'(<1). /110

Tip de portabilldad 12.1
tipos de monitores de compuutdora
COli

£0'10 puede hacer que los

gflijic:os pureZCIIII

.IeI' de dinuuc« lama/ius

dislinlCls resoluciones (es tlecit; /0 densidad de los pixeen dlstintos //lul/itores. a en cl mis-

monitor con distintas L'Qlljigul'llriolles.

12.2 Contextos de graficos y objefos de graficos
Un coniexu, de gl'41icus en Java perrnitc dibujnr en 1<1antalla. Un objeto Graphics adrninistra un contexte p de gniflcos y dlbuja pfxeles en lu pantalla que representan texto y otros objetos graficos (como lfneas, elipses, rectangulos y oiros poljgonos). Los objetos Graphics contienen metodos para dibujur, manipular tipos de letra, manipulur colores y demas. Todos los npplets que hemos vista en el tcxto, que dibujan en In pantalla, han utiliza-

. ya que realiza ciertas tareas dependientes del sistema. el amarillo indica precaucion y el verde indica que se puede pasar. naranja rosa cyan magenta amarillo negro blanco gris gris clare gris oscuro rojo 255. Las constuntes de colores previamente declaradas se sintetizun en la figura 12.4 Los rnstodos de Color (Parte 1 de 2.512 Graflcos y Jova2D CapITulo 12 capITulo 12 Graflcos y Java2D 513 (O. ya que se conformun n las convenciones de nomenclatura para las constantes. Cuando Java se implementa en cada plataforma. ya que el dibujo de graficos es un proceso coturolado por eventos.0.3 Constantes de Color Metoda Descrlpcl6n Constructores y me/ados de Color public public Color ( int r.64 verde azul 255.255 ° Figura 12. EI encabezado del metoda paint es: . EI metodo repaint no debe redefinirse. 12M 192. swing.64. todas las teenicas que se mostranin aqui pueden utilizarse en applets.. La clase Graphics es una clase abe tract (es decir.0 255..O)-~~---~_ -. la clase Component es una superclase indirecta de JApplet. para borrar el fonda del objeto Component. verde y azul. y despues update llama directamente a paint. 175. do el objeto Graphics 9 (el argumento para el metoda paint del applet) para administrar el contexte de gra· ficas del applet. y) 12. En este capitulo dcmostraremos como dibujar en las aplicaciones. EI rnetodo repaint es llamado can frecuencia par el programador. +y ejeY Figura 12.1 yvarios metcdos y constructcres se sintetizan en la tigura 12. Las subclases de JComponent gcneralmente pintun desde sus rnetodos paintcomponent.255 255. Figura 12. se haec una llamada al metoda paint de ese objeto.o2 O.0. 128. debe ocurrir un evento (como cubrir y descubrir el applet con otra ventana). int II. IIIcual proporciona la interfaz que nos perrnite utilizar graficos de una manera independiente de la plataforma. De manera similar. En versionesunteriores deJava.. expresadoscornu valorcs de punto flotante de 0. no puede haber una accion de implcmento de las herramientas de dibujo en todos los sistemas. quitando cualquier dibujo anterior. las herrarnientas de graficos que permiten a una PC con Microsoft Windows dibujar un rectdngulo.0 II 1.4 SOil mctodos de Graphics que son especfficos para los colores.3 Control de colores Loscolores mejoran In upariencia de un programa y uyudan a transmitir su significado. Esto contribuye a la portabilidad de Java. Esta lmplernentacion esta oculta para nosotros por medio de la clase Graphics.2 Sistema de cocrdenodos de Java. Cuando se ejecuta un applet. int b ) Crea un color basado en los componentesrojo. es el mismo que hernos estado utilizando cn nuestras clases de applets.255.3.0. Este metodo solicita una Hamada al metoda update de In clase Component 10 mas pronto posible. 255 128. (Hablaremos sobre esta clase en el capitulo 13. para forzar una operacion paint. Como el dibujo sc neva a cabo de manera distinta en cada plataforma que soporta a Java.4.3. EI sistema pusa este objeto al metoda paint cuando so requiere una operacion de pintar (paint) para un Componente. y sabre los metodos repaint y update. En el siguientc capitulo hablaremos mas detaIladamcnte sobre la naturaleza controlada pm cvcntos de los gnificos. +x ejeX En este capitulo nos concentruremos en el metodo paint. Aunque esos Hombres todavfa estan disponibles. Observe que dos de los metodos de la figura 12.. se prefiere el uso de los nombres que se muestran en In FIgura12.0 255.) El mctodo paint de Component toma un objeto Graphics como argurnento. 255. Tambien hablarcmos sobre la clasc JComponent: una superclase de muchos componentes de la GUI en el paquete javax. La close Color declara los rnetodos y las constantes para manipular los colores en un progruma de Java. i?'F'?'E La referenda 9 tipo Graphics recibe una referencia a una instancia de la subclase especffica del sistema que Graphics extiende. Las unldades se mlden en pixeles. la superclase de todos los applets de este libro.las constuntesde Color teniun nombresque consiaunude letrasmuyusculasy minusculns. el contenedor de applets llama al metodo paint (despues de las llamadas a los metodos init y start). Par ejernplo. public void paint ( Graphics II ) T ~~~~~===-=-~~=-~~=-==------~~~~~=-Constanta de color Color VolorRGB dti. En realidad. Los encabezados para repaint y update son: public public void void repaint() update( Graphics II ) pubic final static public final static public final static public final static public final static public final static public final static public final static public final static public final static public final static public final static public final static Color Color Color Color Color Color Color Color Color Color Color Color Color ORl\NGE PINK CYAN MAGENTA YELLOW BLACK WHITE GRAY LlGl!'LORAY DARK_GRAY RllD GRllEl. EI metodo paint raras vcces es llamado directamente par el programador. verde y azul. Tal vez a usted Ie parezca conocido el encabezado del metoda anterior..192.255 255. BLUE y sus valores RGB.0 0. expresudoscomo enteros de 0 a 255. son distintas de las herramicntas de gnificos que permitcn a una estacion de trabajo Linux dibujar un rcctungulo. se crea una subclase de Graphics que irnplementa las berramientas de dibujo. y arnbas son distintas de las herramientas de graficc« que permiten a una Macintosh dibujar un recttingulo. Para que paint sea llamado de nuevo. (x. un sermiforo tiene tres luces de colores distintos: el rojo indica alto.0. y los rnetodos de Graphics relacionados con los colores. Muchas herramientas de la c1ase JApplet son heredadas de la clase Component.255. 192 64. 0. cuando se muesIra cualquier objeto Component.) EI metodo update toma un objeto Graphics como argumento. 175 0. () 0.255. 1. el cual es suministrado uutomaticamente por el sistema cuando se hace la llamada a update. Si el programador necesita llamar a paint. Color( float r. Par ejernplo. no pueden instanciarse objetos Graphics). se hace una llarnada ul metoda repaint de Component. am. Sin embargo.200. float b ) Crea un color basadoen los componentesrojo. float II. La clase Component es IIIsuperclase para muchas de las clases en el puquete java. .0.

Si este es el caso.. EXIT_OtCCLOSE ). Sin embargo. En In linea 25 se utiliza el metoda fillRect de Graphics para dibujur un rccuingulo rC~lcllo el color actual.4 Los metocos de Color y los metodos de Graphics relocionodos con los colares. En In linea 26 se utlllza el metoda drawString de Graphics para dibujar un obje10 String en el color actual. se haec una llamuda al metoda paint de la clase MostrarColores (lfneas 18 a 45) para pintar la ventana. Figura 12. EI primer componcnte RGB especifica IIIcantidad de rojo. import java.g. 16 Figura 12. 0. Entre mayor sea el valor RGB.(Parte 1 de 2. verde y azul. ). En la linea 24 se utiliza el metodo setColor de Graph:!. /! estahlecar nuevo color de dibujo utilizando vatores f Ioat 130. 130. Los valurcs int dehen estar en el range de 0 a 255 y los valores float dcben estar en el range de 0.ar Ia ap l i cac i on public st. Los tres cornponentcs ROB pueden ser enteros en el rango de 0 a 255. public void setColor(Color c) Establece el color actual para dibujar con cl contexte de grdficus.) . La expresion g. - 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 20 17 18 19 (/ dibujar rectangulos y objetos public void paint ( Graphics 9 ) ( String en distintos calares // llamar a1 metodo paint super.4 al dibujar rectangulcs rellenos y cadcnas en varies colores distintos. el cuul represcnta cl contenido verde. en donde cada argumento cspcciflca In cuntidad de rojo.0 1I 1.awt. La uplicacion de la figurn 12. Java perrnite al progrumador seleccionar de entre 256 X 256 X 256 (0 aproxlmudumente 16.) Cuando la aplicacion cmpieza a ejecutarse.javB de los colores. RGB indi viduale/l 42 43 44 45 47 48 49 50 51 52 53 54 46 } // fin del metoda pai nt // ejecut.i on . EI nuevo ohjcto Color tendra las cantidades de rojo. I I fin devl e clase MostrarColores 1 2 3 4 7 12. mayor sera In canudad de esc color en particular.cs para cstablccer cl color uctuul de dibujo. EI metoda setColor de Graphics cstablccc el color actual de dibujo.5 Cambia de colo res para dlbujar. la cantidad de azul. En conjunto.514 Gr6flcos y Java2D Capftulo CapITulo 12 Gr6ficos y Jova2D 515 Metoda public public public Dsscrlpclen int getRed() Devuelve un valor entre 0 y 255. int getBlue() Devuelve un valor entre 0 y 255.at ic void main ( Strinq ( arqs [I ) MostrarColores aplicacion = nEWMostrarColores (i. 9 10 11 12 13 14 15 super ( "Usa de los colcres" setSize ( 400.dravn'tring( I! mostrar nuevo color de dibujo utilizando abjetos "RGBactual: valares " _. el cuul rcpresenta cl contenido azul.) Todo color sc crea a partir de un componcnte rojo. a estes cornponen. 90 }. Los metodos getRed. 65 }.5 demuestra varies metodos de la figura 12. 40 }. (Parte 2 de 2. respectivamentc. 0 ) creu un nuevo objcto Color que represents raja (valor 255 para raja yO para los valoresuzul y verde). la cornputadoru mostrani el color mas cercano que pueda. res se les llama valores RGB. Color estaticas /1 establecer g.swing. el cuul rcpresenra el contcnido rojo. int getGreen() Devuelve un valor entre 0 y 255. import jav~x. EI metoda getColor de Graphics devuelve un objeto Color que reprcscnta el color actual de dibujo. Los des constructores de Color se muestrun en la figura 12. (Parte 2 de 2.0. a pueden ser valores de punto flotanre en el rango de 0. el segundo. los cuales representan 1(1antidad c de rojo. ap l i cac.*. La expresion new Calor( 255.4(uno que toms tres argumentos int y otro que tomu tres urgurnentos float.paint( 9 ). 1/ Fig. azul y verde que se especifiquen. In cantidud de verde y el tercero. verde y azul). setVisible( true }.5: MostrarColores.7 mill ones) colores. getGreen y getBlue de Color devuelven valores enteros de 0 a 255.5 Cambio de colares para dibuJar. /1 establecer nuevo color de La superclase de dibujo utilizando enteros 130.getColor(}. no Ladas las computudoras son capuces de mostrar todos estns colorcs. setDefaul tCloseOperation ( JFrame. EI metoda fillRect con recibe los mismos panirnetros que el rnetodo drawRect (descnto en el capitulo 3). /1 Demostraci6n 5 public class HostrarColores extends JFrame { y dimensiones de la 'rentana 1/ el constructor es t ahl ece cadena de barra de titulo public MostrarColores (i ( 6 8 Figura 12. Merat/os de Graphics para manipular objeto« Color public Color getColor() Devuelve un objcto Color que representu el color actual puru el contexte de gnificos.0 aLD. EI metoda setColor recibe un objeto Color. get Color () recupera el color actual del objeto Graphics. uno verde y otro azul.·. 130 ).

6 EI cuadra de dl610ga JColorChooser. La letra f anexada a una litera! de punto flotantc in. setVisible( true ). radas (Color. (Parte 1 de 2. Observe In sintaxis de los valores. de colores • getContentPane(!. import java.oaeoparat i on ( JFrame. set. Color). Los objetos Color /10 puedcn modificarse (es decit.LIGHT_GRAY. import j avax . // fin del constructor de MostrarColores2 /1 ejecutar la aplicaci6n public static void main ( String { args [J ) MostrarColores2 aplicacion ~ new MostrarColoreo2 (). par 10que se crean cuando la clase Color se carga en memoria.Cl. las misrnas tarcus. ( color == null ) color ~ Color.UT_ON_CLOSE. Of para ver.Layout ( new Pl owl.eyout U ). import java. BLUE).:i ava /1 Seleccionar colQres con JColorChooser. ). Of para azul). 32 33 34 35 36 37 38 39 AO Al A2 A3 // ).addActionListener ( new ActionLiGtener() ( // clase interna an6nima 25 26 27 28 /1 mostrar JColorChooser cuando el usuario hag a clic public void acLionPerrormed( ActionEvent evento ) { en el bot6n 29 30 31 Figura 12. ~. si no se devuelve un color // de contenido fin de la clase interna an6nima fin de la llamada a addActionListener carnbiarColorBoton ). setDefaul t. *. De rnanera prcdeterminuda. aplicacion.516 Grdftcas y Java2D Capfiulo 12 capffulo 12 Grdftcos y Java2D 517 EI objeto Color devuelto se concatena can la cadena "RGB actual.) Figura12. 130 )." .awt. r~ Observaclon de ingenieria de software 12. prlvato Color color ~ Color.) . SOil inmu/obles).6 EI cuadra de dl61ago JColorChooser.LIGHT_GRAY. Of para rojo. event. adernas de los valores rojo.Ioraoton . En las lineas 29 a 31 y 34 a 36 Be llevan U cabo. Observe que new no se neccsita para creur la constante.add( setSize( 400. ·12. el color de fondo de In ventana de la aplicacion cambiani de color. En III linea 29 se uliliza el constructor de Color con tres argumentos float para crear cl color verde (0. I // fin de la clase MostrarColores2 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 { super ( "Usa de JColorChooser" contenedor contenedor. cambi arco. de yO. EI paquete j avax . awt. (Parte 2 de 2. 1. verde y azul. La instruccion de las llneas 42 y 43 demuestra el uso de los metodos getRed. cita a! metoda toString de lu clase Color.or (0 utilitur UIll! de las COils/ames de Color previarnetUe declaradus].6 el lector podni oprimir un bot6n para mostrar un cundro de dialogo JColorChooser. tiene cl nornbrc de In clase y el paqucte (j ava. public class MostrarColores2 extends JFraille private JButton cambiarColorBoton. Observe que la representacion String del objeto Color con. debe crear lllllHII'I'O objeto Co/. Las constantes de Color son static. las llterales de punto notan. dica que III literal debe tratarse como de tipo float. swing proporciona el cornponente de In QUI JColorChooser para permitir a los usuaries de aplicaciones seleccionar colores. en tiernpo de ejecucion.10 que produce una llamada implf. En In linea 34 se establece eI color actual de dibujn a una de laHconstantes de Color previamente decla. / I Fig. swing. te se tratan como de tipo double. E. private Container cont enedcr: 1/ configurar la GUI public MostrarColores2() 1 2 3 4 5 A4 A5 46 47 48 49 50 51 52 53 54 55 56 57 58 contenedor.1 Para cambial' el color. un color de una de las rnoestros. de eventos 21 22 23 24 / I configurar cambiarColorBoton y registrar su manejador camcrcrcororaoton ~ new JBut ton ( "Cambiar color" ). awt. nuevamente. En la tigura 12. Cuando seleccione un color y oprirna el bot6n Aceplar del cuadro de dialogo. 6: Most rarco lcr esz . getGreen y getBlue de Color en el objcto Color •MAGENTA previarncnte dcclarndo. '. 1/ // if establecer color predeterminado.*.

en las llneus 33 y 34 se dctermina si color es null.6 muestra cl cuadro de dialogo JColorChooaer predeterminado. int estilo.7 Las fiches HSBy RGB del cucdro de dl610go JColorChooser. int ITALIC Constaute que represcnta un estilo de tipo de letra en cursivas.). public Font( nombre. a si el usuurio oprimc concetor 0 cierra el cuadra de dialogo sin oprimir Aceptor. Este metodo devuelve 01 objeto Color seleccionudo.rcororChooser para mostrar el cuadro de didlogo del seleccionador de colores. LIGHT_GRAY. verde y azul del color. Estc cuadro de diulogo estara centrado en el componente padre. Estas fichas representan tres distintas forrnas de seleccionar un color. Observe la sintaxis especial MostrarColores2. un objeto String a mostrar en la barra de titulo del cuadro de dialogo y el Color inicial seleccionado para el cuadro de dialogo. Una vcz que el usuurio selecciona un color. como una cudenu public String public boolean public boolean getFamily() Devuelve el nombre de lu familia del tipo de letra.=-== __ ~~~=m~=*~~~~~~:p~~~~~m~'="~~~~=sR~. A este tipo de cuadro de diiilogo se le conoce como cliudro de didlogo modal (el cual se describira en el capitulo 14).4 Control de tipos de letro Ell estn seccion presentaremos los metodos y constantes para controlar los tipos de letras. salllrllcioll isuturation.518 Gr6ficos y Java2D Capitulo capilulo 12 Grafico5 y Java2D 519 rcaUdad hay tres fichas en la parte superior del cuadro de didlogo: Muesjras. constructores y metodos de Font para dibujar floligonos public final static static static String int PLAIN Constante que represcnta un estilo de tipo de letra simple.am~~~~w=a=~~~= COIlS/antes. y de ser asf color se establece en el valor predeterminndo Color. Si el padre es nul. el usuario no podra inteructuar can el componente pudrc. EI componente padre es una referenda a la ventana desde la que se muestra el cuadro de diiilogo. Dcvuclve true si el tipo de letra esni en cursivus. estilo y tarnario cspecificudos par ta referenciu f al objetc Font. como una cadcna. verde y azul Figura 12. . y brillo (brightness). Mientras el cuadro de dialogo para seleccionar colores se encucntre en Ia puntalla.8.8 fVietados y constantes relacianadas can 10close Font.9 vimos que puede tener acceso a In referencia this al objeto de lu clusc externa si califica a this con cl nombre de In cluse externa y un punto (. La segunda captura de puntalla de la figura 12. Las fichas HSB y RGBse muestran en In ligura 12. entonces cl cuadra de dialogo se centra en In pantalla. public boolean is!talic() Comprueba si un tipo de letra ticne estilo en cursivas. public int getSize() Devuelve un valor entero que indica cl tnrnafio actual del tipo de tetra.I. La ficha HS8 Ie perrnite seleccionur un color con base en maiiz (hue). • . public public final final int BOLD Constante que representu un estilo de tipo de letra en negrius. Dcvuelve true si el tipo de letra es simple. En In linea 37 se utiliza el metodo setBackground para cambiar el color de fonda del panel de contenido (rcprcsentado por contenedor en este progrumn). La mayorfa de los metodos y constantes de tipos de letra son parte de la clase Font. EI metndu setBackground es uno de los muchos rnetodos de lu clase Component que pueden utilizarse en la mayoria de los componentes de la GUI. Observe que en Figura 12. public void aetFont( Font f ) Estublece el tipo de letra nctual at nomhrc del tipo de tetra. Devuelve true si el tipo de tetra esta en negritas. que perrnite uI usuurio seleccionur un color de una variedad de muestras de colores. - Metodo 0 constante Descrlpclon Controles desllzables para selecclonor los componentes role. public int getStyle() Devuelve un valor entero que indica el cstilo actual de tipo de letra. Metados deGraphics paramunipular ubjetos Font public Font getFont() Devuclve III refcrencla a un objcto Font que representa el tipo de letra actunl. estilo y tarnano espccificados. En las lfneas 29 y 30 de actionPerformed se utiliza el metodo esuitico showDialog de . Algunos metodos de la clase Font v In clase Graphics se sintetizan en la figura l2. Recuerde que en la seccion 10. iSBold() Cornprueba si un tipo de letra tiene cstilo en negritas. this que se utiliza en la linea 30. La fichu RG8le permite selecclonar un color mediante el usa de controles deslizahles pnrn seleccionar los componcntes rojo. 12. HS8 y RG8. public String getName() Devuelve el nombre actual del tipo de lctra.7. isPlain() Comprueba si un tlpo de letra ticne estilo simple. int tamano ) Crea un objeto Font con el nombre de tipo de letra. Este metodo toma tres argumentos: una referencia a su objeto Component padre.

[1 ) TiposDeLetra aplicacion = new '[iposDeLetra () . es necesurio conocer lnformuclon precisa acerca de IIIrnetrica de un tipo de letra.cs cambia al tlpo da latra para dlbujar. todo el texto que se muestre despuc» de lu Hamada apureceni en el nuevo tipo de letrn basta que este se modifique. una cadena 27 28 / I cambi. el descendente (lu distancia entre la base de Ia linea y el punta inferior del tipn de letra) y el uuerlineudo .nq .". g. EI metodo getS!ze devuelve el tarnuno del tipo de letra en puntos. import j avax. Los estilos de los tipos de letra pueden usarse combinados (por ejemplo. El tamaflo del tipo de letrn se mide en puntas. ~1 ~ e-ee Tip de portabilldad EtllIlmem 12. dibuj ar una cadena ).setColor( Color.ar tipo de letra de la superclase a Serif (Times I .cdc paint II ejecutar la aplicaci6n public static void main( String { arg. Monospaced. Cada llamada al constructor de Font pasa un nombre de tipo de letra (Serif.9 EIrnetoco setFont public class 'riposDeLetra extends JFrame ( de la ventana de Graphics cambia el tlpo de latro pora dlbujar (Porte 2 de 2. i.drawString( "Monospaced 24 puntas. Font. El metoda getName devuelve el nombrc del tipo de letra actual como una cudenn. 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 II cambiar t i. ITALIC t Font .) FIgura 12. como la aiIrlra. setDefaultCloseOperation ( JFrame. Monospaced. EI valor entero devuelto puede ser Font. setSize ( 450. Observe que en In linea 36 sa cambia el color de dlbujo a rojo.9ji~!::"MQ~'pi. (In diferencla entre el dcscendente de una linen de texro y el ascendente de la linea de texto que esta arriba: es decir.awt. 0 SansSerif) como una cndenu. curs.java Usa de los t i.i1iiiE:. negrita 0 cursiva. *.i. 109ira. EXIT_ON_CLOSE). lava sustituini el tipo de tetra En In figura 12. ITALIC y Font. Una vez que se invocu el metodo setFont de Graphics. los cuales se sintetizan en la figura 12.lpunibles.8.j~l'iI.10 se muestrun algunos elementos de la me/rica de los . como el nombre. neqr i ta. BOLD)y UII tumafio de tipo de letra. EI metodo getFamily devuelvc el nornbre de In familia u la que pertenece el tipo de letra actual. setVisible ( t rue ). BOLD0 In comb inacion de Font. 32 y 37) que se pusan al metoda setFont de Graphics para cambial' el tipo de letra para dibujar. 00 ~ Observacion de ingenieria de software 12. su estilo Y slItamario. SansSerif y Serif. Font.paint( 9 ).RED ). 49 50 II fin de 1a clase TiposDeLetra 1 2 3 4 6 7 5 Fig. EI rnetodo getStyle devuelve un valor entera que rcpresenta el estilo actual. El nombre del tipo de letra es cualquier tipo de lctra soportado por el sistema en el que sc este ejccutando el programu. Error comun de programacion 12.BOLD (negritas): cad a UIIO es lin campo statio de laclasc Font. 125 ).lbujar una cadena ih:scil:f(Jt1~l:~@W~F. ITALIC 0 Font. ITALIC. negrita!cursiva. / I cambi. como los tipos de letru esuindar de Java Monospaced. Dialog y D. swi.BOLD). cl espaciarniento entre lfneas). es necesario obtener informacion ucerca del tipo de letra actual para dibujar. 18pts y dibujar una cadena } 1/ fin del met. respectivamente. PLAIN. A mcnudo. SansSer. (Porta 1 da 2.iva .SBold e isItalic devuelven true si el estilo del tipo de letru actual cs simple.po de letra il Sm·if: (Times). EOLD.alogInput estanin siempr« di. Font.·a4!r~j!:i da Graph:l. * i II II Figura 12. Font.et ra.9 se muestra texto en cuatro tipos de letra distintos. El programa utiliza el constructor de Font para inicializar objetos Font (en las lineas 24. con cadu tipo de letra en diferente tamaao. 70 ). un estilo de tipo de lctra (Font .f. En la figura 12.520 Gr6ficos y Jova2D Capitulo 12 capfiulo 12 Graficos y Javo2D 521 EI constructor de la clase Font lorna tres argumentos: eillombre del tipo de letra. EI nombre de la familia del tipo de letra es especffico de la plataforma. 12. PLAIN (simple). 24pts y d. Los objetos Font s(m inmutables (Font IIll tielie metodos cstnblecer para modijkar las curucteristlcus del tipo de tetra uctual]. 29 30 31 g.l'pecijlc£lr till tipo de tetra que 1i0 esttl disponilite ell UII sistema es prcdetermlnado de use sistema (generatmeiu« Sed f). En la figura 12.qtlU.ar t ipo de letra a 140nospaced (Courier) . Los rnetodos isPlaiu. aplicacion.9 EImetoda setFont Metrica de los tipos de letra En ocaslones. por 10 que la siguiente cadenu que se muestrn apurcce en color rojo. PLAIN.9: TiposDeLetra. Impcr t java. curs] va. Tambien hay metodos de Font disponiblcs para probar cl estilo del tipo de letra actual.tQ.8 se sintetizan varios metodos de Font que se utilizan para obtencr informacion sabre el tipo de letra.) 8 9 10 11 12 13 14 15 16 17 18 19 20 II estableccr batTa de titulo public TiposDeLel:ra i) super'( "Uso de los y dimensiones tipos de letra" ). debe crear WillI/eva objeto Font.1 1111 error ~ ~ E. II mostrar cadenas en distintos tipos public void paint ( Graphics 9 ) ( de letra y colores 21 22 23 24 25 26 i / l l amar al metoda paint super. El estilo de tipo de letrn es Font.2 de tipos tie letra varia enormemeiue entre sistemas. 28.~:-CiF. 12pts y dibujar ). ITALIC (cursivas) 0 Font . Un punto es 1172 de una pulgada. 20.. Font.2 Para cambiar el tipo de tetra.. Java gal'llntizI' que los tipos de letra Serif. EI metoda setFont de Graphics estublecc el ripo de letru a dibujur en ese morncnto (el tipo de letra ell el cuuJ se mostnuii el texto) en buse a SlI argurnento Font.i.pcn de l. el estilo y el tamario dcJ tipo de letra.

java 2 i I Met:odosde FontMetrics y Graphics iit i Les para obt ener metrica de t ipos de latra.12 .Linea base ---' Descendente Figura 12...dr<lwString( g.11 se sintetizan estos rnetodos. 3 import java. En la llnea 22 se crea y se establece el tipo de letra actual para dibujar en SansSerif. 12. aplicacion. public FontMetrios getFontMetricB( Font f ) Devuelve el objeto ll'ontMetrioBara el argumcnto Font especificado.12 se utilizan los metodos de 10 figura 12.drawString ( g. 210 I. en puntas. descendente. En la figura 12. Metodo Descripcl6n Me/Odos de FontMetrias public int getAscent() Devuelve un valor que represcnta el ascendente de un tipo de letm. 16 17 18 II mostrar metrica del tipo de letra public void paint ( Graphics g ) Matrlcas de los tipos de letro. y Graphics para obtener 10 Informocl6n mefrlcc de un tlpo 45 46 47 48 Metrica aplicacion " new Metrica ().drawString( g.12 Matrlcos de los tipos de letro._IILJ_L-I/Jf _ L _j .setPont( new Font( "SansSerif". 1/ fin de la clase Metrica 1 II Fig. 4 import javax.11 para obtener la informacion metrica de dos tipos de letra.awt. public int getPescent() Dcvuelve un valor que represcnta el descendente de un tipo de letra.BOLD. EXIT_aN_CLOSE ). y dimensiones de la vent ana tipos de tetras. Observe que la coordenada que se pasa a drawString quierda de In linea base del tipo de letra.) Figura 12. (Porte 2 de 2. 5 6 public cless Metrica extends JFrame ( 7 8 Figura 12. junto con-el metoda getFontMetrics de la clase Graphics. 10.dr<lwString( g. Font. setSize ( 540. 12 puntas. )..) 9 10 11 12 13 14 public Metrica () ( II establecer cadena de la barra de titulo super ( 'Demostraci6n de FontMetrics" ). 10.awString( g. ).drawString ( 14 ). Me/Odas de Graphics para obtener la me/rica de 1111 42 43 44 tipo de tetra public FontMetrics getFontMetrios() Devuelve el objeto l'ontMetrioB del tipo de letra (objeto Pont) actual para dibujur.11 Metodos de FontMetrica de letrc. II llamar al metoda paint de la superclase 22 g. En la lfnea 23 se utillza el metoda getl1'ontMetricEl de lu clase Graphics pura obtener el objeto FontMetrica del tipo de letra actual. En In figura 12.drawString ( g.. public int getLeading() Devuelve un valor que representa el intcrlineudo de un tipo de letra. 12 ) ). II fin del metodo paint II ejecutar 1a aplicaci6n public static void main( String args[] ( public int getHeight() Devuelve un valor que representa In altura de un tipo de letra. p Figura 12.*. ).dJ.setFont( g. "--""_"---t-.522 Graficos y Java2D Capilulo 12 Cap~ulo 12 Graficos y Java2D 523 • Interllneado Ascsndente . En la linea 24 se utlliza una Hamada impliclta al metoda toString de 1& clase Font para mostrar In represenracion de cadena del tipo de letra. 190 ).dr<lwString( "Tipo de Letra actual: " "Ascendente: " + "Descendente: " + "Altura: ' • "Interlineado: + font. negrita. corresponde a In esquina inferior iz- 15 La clase FontMetrics declura varies metodos para obtener informacion metrica de los tipos de letra. altura e interlineado del tipo de letra.12: Metrica.swing. setDefaul tC1oseOperatioro( JFrame. (Porte 1 de 2.10 MMrlca de los tlpos de letra. setVisible( true ).paint( g). en puntas.*.-- 19 20 21 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 super. en puntas. En las lfneas 25 u 28 Heutilizan los metodos de l1'ontMetrics para obtener el ascendente. g. . g... en puntas.

rectangulos y ovules. int x2. Para cada metoda tro anchura y otro al tura. int anchura. Figura 12.5 Dibujo de lineos.14 y ovolos. 165 ). 4 import javax. int anchura.) 40 41 42 43 I !I fin de l metoda paint 1/ ejecutar La ap li. sei:Visible( true I. In cual reeibe un argumento Font y devuelve su cortes. setColor ( Color . La esquina superior izquierda del Icctangulu [nuginurin que 10 rodea tiene las coordenadas (x. figura. int y. g. (Parte 1 de 2. public void fil13DRect( int x. La esquina superior izquierda del recuingulo tiene Ius conrdenadus (x. int altura ) 12. Los val ores de anchuraArco y alturaArco determinan el grade de redondez de las esquinus (veu lu figura 12. rectangulos y 6valos. 3 import java. r ect. rectangulos y ovolos. int y. public void draw3DRect( int x. en el color actual y con lu anchura y altura especificadus. 9 10 11 12 13 14 15 16 17 18 19 20 21 / / est. Figura 12.l. El ovalo toea los cuiuro lades del recuingulo imaginario en el centro de cada uno de los ludos (venia tigura 12. swing. rectangulos y 6valos" ). La csqulnn superior izquierda del rectdngulo ticne las coordenadus (x.!l! -- A'S'" == Metoda Descrlpclon 5 6 int yl. java 2 / / lJibuj 0 de l ineas .anqu. public void drawOval( int x. Los vulores de anchuraArco y alturaArco determinun el grade de redondcz de las csquinas (vea la figura 12. y). y2). Dibuju un ovulo rclleno en el color actual. int anchura. En la linea 31 se utiliza una segund. (Porte 1 de 2. descendente.16).a barr a de titulo public LineasRectsOvalosi) ( super t "Dibujo de lineas. El rectangulo uparece con relieve cuando b es true y sin relieve cuando b es false. lineas. int altura) Dlbuju un rectangulo relleno con lu anchura y altura especlllcadns. int y2 ) 7 8 1 / / Fig. public void fillRect( int x. public void drawRoundRect( int x. en 01color de fondo actual. sus valores deben ser rnimeros no negativos.) WU--::l. y). y). int anchura. La esquina superior izquierdu del rectangulo tiene las coordenadas (x. int y.16). 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 g.15). public void fillRoundRect( int x.14: Lineaskect suva loa. con lu anchura y altura especificndas. Metodo Descripclon public void fillOval( int x. y).caclon public static void main ( String Dlbujo de Ifneas. int int anchuraArco. version del metoda getFontMetrics de Graphics.awt . recningulos can esqninus rcdcndeadas y ovules. 14 puntos. int y. yl) y el punto (x2.on y ovulos public void painti Graphics g I super. int altura. int altura. no sc mostrani la recningulos. altura e inlerlinea_ do de esc tipo de letra. int anchura. sionales.13 Metodos de Graphics para dlbuJar I[neas.13. Los de dibujo que requicre un panimeDe 10 contrario. int y. int alturaArco ) Dlbuja un rectangulo rellcno con esquinas redondeadas. int altura.setColor( Color. g. int altura) Dlbuja un recuingulo relleno con la anchura y altura especlficudns. y).YELLOW I. int alturaArco ) y.1 superc l ase Dlbuja un rectangulo con csquinas redondeadus. boolean b 1 Dlbujn un recuingulo tridimensional en el color actual. int anchura. y).15). 12. En las linens 34 a 37 se obtiene el ascendente. int altura. 1/ Llamar al metodo pa int de 1. Dibuja una linea entre 01punta (xl. int anchura.14 dernostramos como dibujar una variedad de lineas. rectangulos y ovolos En esta seccion presentaremos varies metodos de Graphics para dlbujar rnctodos y sus parametres se sintetizun en la figuru 12. en el color actual y con Inanchura y ai tura especlficadus. int anchura. (Parte 2 de 2. int altura) Dlbuju un ovalo en el color actual. Observe que la metricu es ligerarnente distinta para cada uno de los tipos de leiru.13 Metodos de Graphics para dlbuJar lfneos. *.BLUE I. recuingulos tridimen. public void drawRect( int x. boolean b ) Dibuju un rectangulo tridimensional relleno en el color actual.ahl ecer la cadena de l. La esquina superior izquierda del rectdnguto tienc las coordenadus (x. con III anchura y altura espccitlcadas. pondicntc objeto FontMetrics. int y. paint ( o I. public void clearRect( int x. En la figura 12. can la anchura y altura especificudns. rec tanqul os y oval os . *. int altUra Dibuja un recuingulo con la anchura y altura cspecificadas.setColor( Color. g. El rccuingulo uparece con relieve cuando b es true y sin relieve cuundo b es false. El OV1UO toea los cuatro ludos del rectungulo imaginurio en el centro tic cuda uno de los lades (veu In FIgura 12. int anchura.setColorl Color.) . int y.CYAN 1. setSlze ( 400. / I mostrar ( var i as Lineas . La esquinu superior izquierda del rectringulo tiene Ins coordenadas (x. con la anchura y altura especlficudas.I1AGENTA I. rectangulos 44 arqs (I I Figura 12. y). La esquina superior izquierda del recuingulo imaginarlo que 10 rodea ticne las cocrdeuudas (x. public class LineasRectsOvalos extends JFrame { y dimensiones de la ventana public void drawLine( int xl. cursiva. int anchuraArco. int y.524 Graficos y Java2D Capfiulo 12 caprrulo 12 Graficos y Java2D 525 En In linea 30 se crea un nuevo tipo de letra Serif.

en donde empieza el area. Los primeros dos urgumentos especificun la esquina superior izquierda del rectangulo. Los ultirnos dos argumentos especifican la anchura y la al tura del rectangulo dellmitador. El ultimo argumenlo determina si el rectangulo esta COli relieve (true) 0 sin relieve (false).l -.Ell la figura 12. Los reculngulos can relieve tienen los bordes de color original del dihujo en las partes superior e izquierda del rectangulo.7 Dibujo de poligonos y pOlilineas Los polfgollos son flguras cerradas de varies lados.16 se muestra un ovalo delimitado par un rectangulo..17 se muestran dos arcos.17. EXIT_ON_CLOSE II fin de la cLase LineusRect. (Parte 2 de 2. Cuando dibujarnos un areo. junto con la anchura y In altura de un rectangulo redondeado. al tura. en grades.15 se muestran la anchura y altura del arco. El arco se extendera a 10 largo de una parte del ovalo. Los rectangulos sin relieve tienen los bordes de color original del dibujo en las partes inferior y derecha del rectangulo. . Para ilustrar el rectdngulo delimitador que ayuda a determinar en donde aparcce el area. 270' . Los dngulos de los areas se miden en grades.14) y fil13DRect (linea 35) toman los mismos argumentos. EI ungula del arco eapecifica el rnimero total de grados husta los que se va u extender el urco. EI angu10 lnicial indica. respectiValTIcntc.lneasRectsOvalos(). el resultado es un circulo. setDefaultCloseOperation ( JFrame. En la tigura 12. . compuestas por segmentos de linen recta.sOvalos ).18.17 Angulos posltlvos y negatlvos de un arco. Observe los cuudros punteados ulrededor de los arcos en la figura 12. Angulos positlvos Angulos negatlvos 90' t--. y los valores de anchuraArco y al turaArco son 0. debemos especificar un rectangulo delimitador para un ovalo.526 Graficos y Java2D Capilulo 12 Capijulo 12 Graficos y Java2D 527 45 46 47 LineasRectsOvalos aplicacion ~ new L. anchuraArco y al turaArco tienen los mismos valores. 48 49 50 Los metodos drawOval y fillOval (lfneas 38 y 39) taman los mismos cuatro argumentos.) Los metodos fillRoundRect (linea 30) y drawRoundRect (linea 31) dibujun recningulos COil esquinas redondeadas. Un area se dibujn como una porei6n de uu ovalo. Las polilineas son una secuencia de puntos concctados.0' J 180' .. Si se utilizu el misrno valor para anchuraArco y al turaArco se produce un cuarto de circulo en cada esquina.18. '.) 12. (El rectangulo delimitudor no se muestra en lu pantalla.15 Anchura y altura del arco para los rectangulos redondeados. Los argumentos terccro y cuurto especifican la anchura y altura del recuingulo. Los arcos que se extiendcn en direccion a favor de las munccillas del rcloj se miden en grades negatives. Los metodos drawArc y fillMe de Graphics para dibujar arcos se sintetiznn en la tigura 12.----I 90' Altura t- . Figura 12. Cuando anchura. En la figura 12.6 Dibujo de areos fillllaundRect drawllaundRect drawOval fillOval Figura 12. El efecto tridimensional de draw3DRect aparece como des bordes del recuingulo en el color original y dos bordes en un color ligeramente mas oscuro.. Observe que el ovalo toea el centro de los cuatro lados del rectdngulo delirnitador.16 Un 6valo dellmitado por un rectangulo. Los metodos draw3DReot (linea 34 de III figura 12. Observe que las coordenadas de la esquina superior izquierda no son cl borde del reculngulo redondeudo.": . rectangulos y ovolos. ---I 180 0 -. 12. EI efecto tridimensional de fi1l3DRect aparece como dos bordes del rectangulc en el color del dibujo original y los otros dos bordes y el relleno en un color ligeramente mas oscuro.14 Dibujo de lineas. y. Los urcos se extienden desde un dngulo inicial. Si los valores para anchura y al tura son los mismos. Los siguientes dos argumentos especifican la anchura y al tura del rectangulo. aplicacion. En la ligura 12. sino las coordenudas en donde se encontraria el borde si el rectangulo tuviera esquinas cuadradas. Los primeros dos argumentos especlfican la coordenada superior izquierdu del rcctangulo delimitador que contiene el 6valo. los primeros tres arcos sc muestran dentro de un recuingulo amarillo que tiene los rnismas argumentos x.19 se demuestra el uso de los metoda. EI eonjunto derecho de ejes muestra a un arco extendiendose desde cera hustu aproximadamente -110 grades.+' -+. 0' 270' Figura 12. el resultado es un cuadrudo. EI eonjunto Izquierdo de ejes muestra it un arco extendiendose desde cera hasta aproximadarnente 110 grades. respectivamentc.20 describimos los metodos de Graphics para dibujnr rolf- Altura Anchura Figura 12. EI efecto tridimensional es dificil de vel' en ciertos colores. . El programa dibuja seis arcos (tres sin rellenar y tres rellcnos). para areas de la figura 12. en base III mirnero de grades especificndos por el ullgulo del arco. Sus illtirnos dos urgumentos (anchuraarco y alturaArCo) determinan los ditimetros vertical y horizontal de los arcos utilizados para represcntar las esquinus. Sus prirnerns dos argumcntos especifican las coordenadas de ln esquina superior lzquierda del rectdngulo delimitador (el area en la que se va a dibujar cl recuingulo redondeado). En lu ligura 12. anchura y al tura que los areas. Los arcos que se extienden en direccion en contra de las munecillas del reloj se miden en gracias positivos.

La llarnada ul constructor de Polygon en la llneu 24 recibe el arreglo valoresX. g.) Figura 12. 15 16 17 18 19 20 21 22 23 24 25 13 14 solSize( 300. int altura.awt. '.co lcr I Color.20 Metodos de Graphics (Parte 1 de 2. Los constructores de la clase Polygon se describen tambien en la figura 12. .. EI segmento del arco se dibuja empezando en anguloInicial y se extiendc hasra los grados cspecificados per anguloArco.C'. int anguloInicial int anguloArco ) . 52 53 I 54 1 2 3 4 II ( DibujarArcos aplicacion . EI segrnento del area se dibuja empezando en anguloInicial y soextiende hasta los grades especiticados por 36 37 38 39 40 g. int y. Observe que algunos metodos requieren un objeto Polygon (paquctc java.21 se dibujan pollgonos y polilfneas.19 Arcos rnosfrodos can drawArc y fillArc. 110 grados 34 35 II empezar en 0 y extenderse g. set.col or I Colo r . 35.19 Arcos mostrados can drawArc y fillArc. g.BLACK I.) para dlbujor poITgonos y rnetodos de 10 close Polygon._'". gonos y polilfneas. public void fillArc( int x. La coordenada x de elida punto saespecifica en el arreglo puntosX y la coordenada y de cadapunto se especitica en el arreglo puntosY. new DibujarArcos(l. Figura 12.drawRectl 15. eetVisible( true I.. ": pub li c class Fig.. lin sector) relutivo a Ins cocrdenudas (x. 80 I. .. el poifgono cierra mediante una lfneu que conectc clultimo puma se con el primero. imparl: java.. BLACK I. EXIT_ON_CLOSEI.".. awt). que contiene Itt coordcnada y Metodo Metodas de Graphics Descripcion para diblljar paligo/ws 30 31 33 II empezar en 0 y extenderse hasta g. 80. int altura. g. SI el ultimo punto es distinto del primero. (Porte 1 de 2. el cual contiene la coordenada x de cada punto: el arreglo valoreeY.setColorl Color. int anchura.20. int anchura. setColor I Color.dra".) II dibujar rectangulos yarcos public void paint I Graphics 9 ) ( super. y) de la esquina superior izqulerda del rectanglilo delimitndor. lmpor t javaxv swi nq . 8Q.". 80 ).19: DibujarArcos. int anguloInicial. 1/ Dibuj o de arcos .20. *. En la figura 12. 44 45 46 47 48 49 50 51 } I I fin del metoda paint / I ej ecutar La apl icac ion public static void main I String args [I Figura 12.setColorl 185. con laanchura y altura especiflcadas. aplicacion. int anguloArco Di~lIjn un urco relutivo a las coordenadus (x. int puntosY[].. utilizando los metodos y constructores de la ligura 12. 35. 80. y) de la esquinu superior izquierda del rccuingulu delimitador. YELLON).Rectl 100.c. setCo1or I Color.java 55 56 58 57 II fin de La clase DibujarArcos 5 7 6 DibujarArcof3 ext ends JFt'ame ( de titulo y dimensiones de la vent ana 9 a II est ahl ecer cadena de la barra publ ic Dfbuj ar'Arcoa t ) 10 11 ( super I "Dibuj 0 12 de arcos" I. 12. 170 I. Eltiltimo argumcnto especifica el mimero de puntos. Color. Dibuja un arco relleno (es decir. set. (Parte 2 de 2. 35.BLACK I.18 Metodos de Graphics para dibuJar orcas. sEtDefaultCloseOperation I JFnune. En laslineas 22 y 23 se crean dos arreglos int y se utilizan pant especificar los puntas del objcto Polygon Hamada poligonol. con In anchura y altura especificadas. YELLOW ). 1/ llamar al mecodo paint de la superc l ase 26 27 28 29 32 I I empezar en 0 y extenderse hast a 360 grados g. paint I 9 I. YELLOW I I hasta -270 grados public void drawPolygon( int puntosX[]. int puntas) Dibuja un pollgono. g. Figura 12. 80 ).drawRectl g. int y.<" 41 42 43 anguloArco.528 Gr6ficos y Java2D CapITulo 12 Caprtulo 12 Gr6flcos y Java2D 529 Melocio Descrtpclon public void drawArc( int x. Este metodo dibuja un pohgouo cerrado.

on. int valoresY[]. Este objeto tiene numeroDePuntos lados.530 Gratlcos y Java2D Capftulo 12 capffulo 12 Graficos y Java2D 531 Melodo Dascrlpclon public void drawPolyline( int puntosX[l.*. 4 import javax. EXXT_ON_CLOSE ). public void fillPolygon( int puntosX[].21 PoITgono5mostrados con drawl?olygon de cada punto y el mimero 6 (el mirnero de puntos en el pollgono).* . El ultimo argumento especifica el rnimero de puntos. public Polygon ( int valoresX[]. (Parte 2 de 2.) Figura 12.t y Y al objeto Polygon. 3 import java. EI poljgono es cerrado. 5 6 public class DibujarPoligonos extends JFrame ( 7 50 51 52 53 54 55 56 // fin de la clase DibujarPoligonos Resultado de 10linea Resultado de 10linea 3 Resultado de la linea 36 8 9 10 11 12 13 14 II estab1ecer cadena de 1a barra de titulo Y dimensiones de 1a ventana public DibujarPoligonos() { super ( "Dibuj 0 de poligonos" ).) pora dlbujar poligollo& y rnstodos de la close Polygon. setDefaultCloseOperation ( JFrame. Figura 12. int puntos ) Dibuja un polfgono relleno. 42 43 44 45 46 47 48 49 } I I fin del metoda paint II ejecutar la aplicaci6n public static void main( String arcs Il ) ( DibujarPoligonos aplicacion = new DibujarPoligonos(). 230 ).20 Metodos de Graphics (Parte 2 de 2. int y ) Agrcga pares de coordenadas . La coordenada x de cada punta Sf cspeciflca en el arreglo puntosl(y In coordenada y de cada punto se especifica en el arreglo puntosY. Este metoda dibuja un poligono corrade. 12. Este objeto no contiene ningun pun to. setVisible( true ). el po!fgono sc cierra mediante unn lfnea que conecte el ultimo punta con el primero. int puntosY[]. apl Icaci. I II Fig. En la linea 26 se muestra j. public void fillPolygon( Polygon p ) Dibuja el poltgono relleno especiflcudo. int numeroDePuntos Crea un nuevo objeto pollgono.21 PoITgonosmostrodos con drawPolygon I I dibujar po lLqoncs y po li lIneas public void paint ( Graphics g ) ( y fillPolygon. La coordenuda x de cada punto Sf especifica en el arrcglo puntosX y la coordenada y de cada punta Sf especifica enel arreglo puntosY.15 16 17 18 19 setSize ( 275. public void addPoint( int ~. Resultado de 10linea 45 . Si el ultimo punto fS distinto del primero. la polllrneu no se clerra.21: DibujarPo1igonos.swing. EI ultimo argurncnto espccifica el mirncro de puntos. 1/ llamar al metoda paint de la superc1ase y filll?olygon.paint( g).loligonol al pasarlo como argumento para el rnetodn drawPolygon de Graphics. EI arrcglo valoresX2 contiene la coordenada x de cada punta y-el arreglo valoresY2 . SI el ultimo punto es distinto del prlrnero. Constructores y maodos de Polygon 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 public Polygon () Crea un nuevo objeto pollgcno. int puntos ) Dlbuja una secuencia de lfneus conectadas.awt . y una coordenada y desde val orear.) 20 super. En las lfneas 28 y 29 se crean dos arreglos int y se utilizan para especificar los puntas de una serie de If· neas conectadas. int puntosYfl. Figura 12. (Parte I de 2. 21 22 23 24 public void drawPolygon( Polygon p ) Dibuja el poltgono especiticado.java 2 1/ Dibujo de poligonos. en donde cada punto consistc de una coordenada x desde valoresX.

. 1 I I Fig" 12. Double. Rectangl e2D. 3 import java.java 2 I I Demcat rac i on de a1gunas figuras de Java2D. rectdngulos. fillRect ( Color .fjJJ 10 11 12 II establecer cadena de la barra de titulo y dimensiones de la ventana public Figuras (I ( En la linea 38 se creu el objeto Polygon Ilarnado poligono2. EI arreglo valoresX3 contiene la coordenada x de eada punto y el arreglo valoresY3 contiene la CQol'de. La primeru figuru que dibujamos es un ovalo relleno con colores que cambian grndualmente. En las !fnca! 27 y 28 se invoca el metoda setPaint de Graphics2D para establecer el objeto Paint que detennina el 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 gg .com/products/java-media/2D/index.1' coonlenadas que ('Specijican el poligono a mostmr. renderable. II dibujar Eiguras can la API Java2D public void paint( Graphics 9 ) { super. 5 import java. setSize( 425. sin puntos.BLUE ). De hecho. En esta seccion veremos las generulidudes de vurius herramlentas de lava2D. Color . tos <'II los arreglos de 11l. 4. Cada una de estas ciases representa una figura con las dimensiones especificadas como valores de punto florante con doble precision. java. Estus son s610 algunas de Ius muchas hernunientas que proporcionn Java2D.. setVisible( true ).setColor ( gg. consulte In dcrnostracion de Iava2D (que se mostro en el capitulo 3) 0 visite la pdgina Web java. java.. 3 I. 0.. 1. que es una suhclase abstracta de In clase Graphics.. RoundRectangle2D. 1. En cada casu.22 Flguras de Java2D. 12. vale_ resY2 y 7 (el mimero de puntos).setColor( gg. tcxto c irruigenes en los paquctes java.*.setColor( gg.22: Eiquras . awt. awt.Double. 6. 7 8 public class Figuras extends ']Frame 9 l. Double. 10. geom.setColor( gg. awt.*. awt.8 La API Java2D La nueva API Java2D proporciona herramientas avanzadas para gnificos bidimensionales. print y java. 1. awt. color. Arc2D. java.RED I.. sun. rellenar figuras con patrones y dibujar lineas puntendas. Ellipse2D). como cambial' cl grosor de linea.*.awl. 4. 3. geom. . mediante una instruccion como: Graphics2D g2d 13 14 15 16 17 18 19 20 21 22 23 super ( "Dibujo de fisruras en 2D" I. ). EI dibujo con lu API lava2 se logra mediante el uso de una instancia de Graphico2D (paquetc java. awt. Los siguientes dos ejemplos utilizun esta tccnica.. por 10que tiene todas Ius herramientas para graficos que se dcmostruron unteriormente en este capitulo. y se asigna a g2dpllfU permitir el acceso a las caracteristicas de Java2D. rrumienras de lu API son Il1UY extensas como para cubrirlas todas en este libro. En la linea 31 se utiliza el metoda drawPolyline de Graphics para mostrar la serie de lfncas conectadus que se especifican mediante los argumentos valoresX2. En la figura 12. arcos y e/ipses En el siguiente ejemplo se muestran varias figuras de lava2D del paquete java. 3 I.' Error cornun de prograrnacion 12.paint( 9 I. Para acceder a las herramientas de Graphics2D.532 Graflcos y Java2D Capfiule 12 capITUlO 12 Gr6ficos y Java2D 533 contiene la coordenuda y de cada punta. fillRect ( gg. En la linea45 S0 muestra el objeto Polygon llamado poligono2 al pasarlo al metodo fillPolygon de Graphics. awt). incluyendo a Llne2D.Float). font.geom. image. madores que rcquieren rnanipuluciones gnificus dctulladas y complejas.swing. /1 dibujar en amarillo II dibujar un rectangulo relleno II dibujar en negro II dibujar un rectangulo II dibujar en azul II dibujar un rectangulo relleno 1/ dibuj(lr en rojo II dibujar un rectangulo relleno 53 54 55 12. (Parte 1 de 2. java. nuda y de cadu punto. 6 import javax. 1. debemos convertir ln referencia Graphics que se pasa a paint en una referenda Graphics2D. .) .image. Color. 10 ).22 se muestra como dibujar figuras de lava2D y modificar sus caractcrfsticas de dibujo. para los progra. 1 . II lmport java.*.2 ~ Se IUllzal'a Will <'xc<'pdriu ArraylndexOutOfBoundsException si et mimem de PUIlIiJS especij1cado. UllRect ( gg. awt.v ell e/ tercer argumento del metod» drawPolygon a del metoda fillPolygon es mayor qu« ellllimero de elemen.YELLOW 0.awe. La APr incluye carncteristicas para procesar artc Iincal. recuingulos redondeados.BLACK I.drawRect( gg. Doubl e y Ellipse2D. java. representada con valores de punto tlotante can precision simple (como Ellipse2D. sirnplernente debemas culificar su nombre can el nombre de la clase externa. Hay una version separada de cada figura. image. Las he. En las lmeas 39 a 43 se utili. Double es una clase static anidada de III clase que se cspecifica a la izquierda del punto (par ejemplo. Para utilizar la cJase static aniduda.awt. Lineas. En la lfuea 36 se muestra un pollgono al pasar al metodo fillPolygon de Graphics los dos arreglos (valoreaX3 y valoresY3) y el mimero de puntos a dihujar (4). Ii llamar al metoda paint de Ia superclase 24 25 26 27 28 29 30 31 32 =( Graphics2D ) g.html. Double. 160 I. En la ]fIlCU 24 sc convierte la referenda Graphics recibida por paint a una referencia Graphics2D. Para ver las generalidades acerca de estas herrnmientas. Observe la sintaxis de cuda uno de los nombres de las clases. En las lfneus 33 y 34 He creun dos arreglos int y se utilizan para especificar los puntos de un poligono. Color. 6 I. awt. el objeto en sf utllizndo para dibujar en todos los metodos paint es una instancla de una subclase de Graphics2D qllc se pasa ul metodo paint y Be utiliza mediante cl objeto g de la superclase Graphics. za cl metodo addPoint de Polygon para ugregar pares de coordenadas x y y al objeto Polygon.

Enlu linea 62 se utillza el metcdo draw de Graphics2D pam dibujar un objeto Shape. Como este degradudo es cicIico (true). awt. Estc alTeglo debe utilizarse para describir los guiones en la linea puntcadn. EI constructor aqui especifiea que la linea debe teller una anchuru de 10 ptxcles. La constante Arc2D. Como In segunda coordenada (35. en este case. DouJ:ile. en este caso. RED. 30). en este caso. Los argumentos cuarto y quinto especifican In coordcnada final del degradado. una instuncia de la clase Rectangle2D. Double especifican las coordenadas r y y de In esquinu superior izquierda. 0 el objeto Paint pucde ser una instancia de las clascs GradientPaint. CHORD dibuja una linea que va desde el punto inicial husta el punto final. Los primeros dos especifican In coordenada inicial del degradadc. En esle caso mostramos una instancia de lu cJnsc ElliP£le2D. Los primeros cuatro nrgumcutos del constructor de Arc2D. un Arc2D. cada guion sera de 10 pixeles de lar- . en este caso. A continuacion dibujamos un area en forma de pastel. Un objeto Paint es un objeto de cualquier clase que irnplernente a la interfaz java.EXIT_ON_CLOSE I. 100) se encuentra huciu ubajo y a lu derecha de la primera coordenada (5. PIE indica que el arco se cierra dibujando dos linens. En estc caso. In Illlchura y la altura del recuingulo delimitador para e! area. En la linen 61 se cstablece el objeto Paint en Color. EI tercer argumento del constructor. El quinto argumento especifica cl angulo inicial. Buf f eredlmage. awt. Una linea va desde el punto inicial del urco hasta el centro del recuingulo delimitador. En la linea 64 se decJara un arreglo float de un elemento. Double recibe seis argurnentos que espccifican las dimensiones del recningulo. En la linea 33 Be utiliza el metodo setStro1ce de Graphics2D para establecer las caructerfsticas del borde del recuingulo (0 las lfncns para cualquier oua figura). EI segundo argumento especifica el area Rectangle del objeto BufferedImage qllc se repetira en todu la tCXIUI"I. En las lfneas 51 y 52 se establece el objeto Paint en un nuevo objeto TexturePaint (puquetc java. El objeto Paint puede scr algo tan simple como uno de los objetos Color previumente declnrados. el degradado va hacia abajo y a la derecha con cierto ungulo. image). En este caso.awt). una instancia de la clase RoundRectangle2D. y otra va desde el centro del rcctangulo dclirnitudor husta el punto final. OPEN especifica que el arco no debe cerrarse. EI constructor de GradientJ?aint que se utilizu uquf requiere siete argumentos. Un objeto TexturePaint'utiliza In imagen almaccnada en su objeto Bufferedlmage usociado (el primer argumento del constructor) como la textura para rellenur una flgura. (Parte 2 de 2. Double recibc CU<ltro argumentos que especifican el rectangulo delimitador pura mostrar la elipse. Double. relleno con uu patron crendo en un objeto BufferedImage (paquete java. GREEN. En lu linea 56 se establece el objeto Paint en Color. se convierte gradualmente en amarillo y luego regresu grndualmente a azul. la nnchura y la altura del rectangulo. utilizamos Una instancia de la cluse BasicStroke. indicu que la imagen se uhnacena en color. } I I fin del ml~Lodo paint 74 75 76 77 78 79 80 II ejecutar la eplicaci6n public static void main ( String arqs [J ( Figura. Finnlmente. 1<1 manera en que esta termina (10 cual so Ie conoce como CO. EI constructor de Rectangle2D. En la linea 32 se utiliza setPaint para estableeer el objeto Paint en Color. En la linea 40 se crea un objeto Graphics2D (con una Hamada al metodo createGraphics de BufferedImage) que puede usarse para dibujar en cl objeto Bufferedlmage. Si cl degradado es aciclico. En la linea 29 se utiliza cl metodo fill de Graphics2D para dibujar un objeto Shape reJleno (una instancia de ~ualquier clase que implemente a la interfuz Shape del paquete java. Paint. En ln linea 58 se utiliza el metoda draw de Graphics2D para dibujar un objeto Shape. II fin de la clase Figuras Figura 12. Sin embargo. amarillo). TYPE_INT_RGB. la rnanera en que las lfneus se unen entre 51 (10 cual se Ie conoce como uniones de [(Ilea) y los atributos de los guiones de In linea (si es una linea puntcuda).Double rccibe cuatro argumentos que especifican las coordenudus x y y de la esquinu superior izquierdu. La clase GradientPaint ayuda a dibujar una figura en colores que cumbian gradualmente (10 cual se conoce como degradado).awt). Los des conjuntos de coordenudus dcterminan In direccion del degradado. dibujamos un rectangulo rojo con lin borde grueso. el color empieza con azul.setDefaultCloseOperation{ JFrame. aplicacion : new Figuras(). En la linea 53 se utiliza el metodo fill de Graphics2D paw dibujur un objeto Shape relleno. En estc caso.534 Gr6flcos y Java2D capnulo 12 Gr6ficos y Java2D 535 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 float qui ones [I " ( 10 ). el cual es una lnstancia de cuulquier clasc que implemente ala interfuz Stroke (pnquete java.3 (In clase Color implementn a Paint). EI metodo set Stroke requiere como argurnento un objeto Stroke. Esta clase proporcionu varios constructores para especiflcur III anchura de lu linea. En las llneas 37 y 38 se crca el objeto BufferedImage. En las ltneas 41 a 48 sc utillznn los metodos setColor.22 Figuros de Javo2D. dibujarnos dos lineas utilizundo objetos Line2D: una sollda y una puuteuda. EI tercer argumento especifica el Color inicial del degrndado. el En objcto Rectangle es del mismo tamafio que el objeto Bufferedlmage. Este objeto 13ufferedImage en particular tiene una anchuru y una altura de 10 pfxeles . La constunte Arc2D. fillRect y drawRect (descriios unteriormente en este capitulo) para crear el patron.) color para la figura a mostrar. La close Arc2D proporciona otras dos constantcs cstdticas pam especificar como se cicrra el arco. utilizando cl esquema de colores RGB. los cuales se presenturon en la scccion 12. Double especiJlcan IllS cOl1rdcnadas illicial y IInal de la linea. Los argumentos del constructor de Line2D.meiu de In clase Line2D. EI sexto especifica el angulo del area. este caso. y cl ultimo especifica como se cierru el urco. puede utilizarse una pardon mas pequeiia del objeto Buf f eredImage. La constante Arc2D. ill color cambia del primer color espccificado (par ejemplo. El constructor de la cluse RoundRectangle2D. utilizamos un objeto GradientPaint. con una linea blanca gruesa.Double. En la linea 57 se establece el objeto Stroke en un nuevo objeto BasicStroke para una linea can 6 pfxeles de anchura. awt).Double. una inst. azul) al segundo color (por ejemplo. el cual cOlltiene el valor 10. WHITE. debernos prirnero dibujar ell cl objeto Buffered!mage. El constmctor de Ellipse:lD. Para crear el patron de relleno para el rectangulo redondeudo. A continuacion. A eontinuacion dibujamos un recuingulo redondeudo. Double. aplicacion.tiIlS). En la linea 34 se utiliza el rnetodo draw de Graphics2D paru dibujar un objeto Shape. EI sexto especifica el Color final del degrudado y el ultimo especifica si el dcgradudo cs cfclico (true) 0 acfclico (false). SystemColor 0 TexturePaint de In API Java2. La clasc BufferedImage puede usarse para producir irmigenes en color y escala de grises. lu anchuru y lu altura del urco utilizado para redondear las csquinas.

2UO) como si fuera (0. YELLOW. import jave .CAP_ROUND).Panc () . titulo.setColor( ( i nt ) I lint) I color de di bu jo al. *: import java.*: import j avax .c no la dibuja for ( int cuenta . (Parte 2 de 2. 1. En Ius linens 24 y 25 se declaran des arreglos int que representan las coordenudus x y .ewt . Para crear guiones de diferentes longitudes en un patron. public Figuras3 () { super ( "D'l.~:r:'. En la linea 69 se dibuja una linea can el objeto Stroke actual. 20. 60 61 62 I I fin de 1"1 cLase Figuras2 10 11 12 13 I lestablecer cadena de la barra de. Toda» las operuciones de dibujo utilizuran ahara la ubicacien (200.ion ap l i cac i.u' una linea ul siguiente punto en la estrella.guras2 ext ende JFrame ( color de fonda y dinens ionea de I a ventana 47 48 49 50 51 52 53 54 55 56 / I est. Si Ius Hneas se unen entre sf (como en un rectangulo en las esquinas). 16 17 18 19 20 21 22 setVisible( true ).v de los puntos en la estrellu. En la linea 66 se establece el objeto Paint en Color. swi nq . EXIT_ON_CLOSE).java II Demostraci6n de una ruta general. En las lfncas 67 y 68 se establece el objeto Stroke en un nuevo objeto BasicStroke.) En lu linea 31 se utiliza el metoda moveTo de GeneralPath para cspecificar el primer punta en Itt estrella.rededor del orIqen y di. ( JFrilm".'. set. 12. !JOO ). Ruins generales A continuacion presentaremos una ruta general: una figura cornpuesta de llneus rectas y curvas complejas. WHITE ): 14 15 siotSlze ( sno. 37$].2~~9S6g~~b.ode paint de la superclase 23 24 25 26 27 28 29 30 Figura 12. En lu linea 28 sc crcu el objeto GeneralPath llamudo estrella. cuenti. JO!~_ROUND).t. Math. Cadanueva llamndu a lineTo dibuja una !fnea del punta anterior al punto actual. ound I Color.on . Una rutu general se reprcsenta con un objeto de In cluse GeneralPath (paquete java.23 se demuestra como dibujur una ruta general.length. cuenta < puntosX.ab l eue r g2c1.23 I I crear La est re l La-vcst. En la linea 37 se utlliza el metoda closePath de GeneralPath para dlbujur una linea del ultimo punto hasta el punto cspecificado en la iiltimu llurnuda II movere. paint ( g ): / I l l amar al met. La linea tendra una anchura de 4 pixeles y extremes redondeados (BasicStroke.i ~ I: cuent.al. urgumento guiones especifica las longitudes de los guiones de la linen. Esto complcta lu rutu general.random() * 256 ) ) ). random () * 256 ).'!:raf~. En la linea 39 se utillzu el metoda triUjslate de G:raphics2D para desplazur e] origen del dlbujo husta In ubicacion (20U.bujar rut as generales public void paint ( Graphics 9 ) { super. * i punl i c class Fi.) 31 32 33 34 35 36 Figura 12. I I di. * 256 ).O'i'5l:J:9~f<iJ.buj ar estrel Lan en coIores for ( int cuent. (Parte 1 de 2. La instruccion for de las lmeus 34 y 35 utilizu el rnetodo lineTo de GeneralPath purl! dibuj.23: Figuras2.l++ ) ( al eator i os 43 44 45 46 2 3 1 4 5 6 7 8 9 II Fig.geom. 20U). awt. GetDeraul tCloseOperation String args[l ) 57 58 59 . cuenta++ ) Rutos generales de Javo2D.a <.igu#lf 38 39 40 41 42 I I q i rar al. new FigUJ:'as21). .536 Graficos y Java2D Capftulo 12 capitulo 12 Graficos y Java2D 537 go. geom).23 Rutas generales de Javo2D.buj o de I iquras qet Cont ent. I I fin del metoda paint I I e jecut ar La aplicaci6n public static void mainl ( Figuras2 apl i cac.t\"eJ. azar new CoLor I ( int ) ( M(Lth. EI ultimo lll'gluncnto EI indica el [ndice inicial en el arreglo guiones para el primer guion en el patron. En In Iigura 12. simplemente debe proporcionar la longitud de cadu guion como un clemente en el arreglo. 0).. IIIunion de IIIlineas sera redondeuda (BasicStroke.Backqr 3D" ). en forma de una estrella de cinco puntas.rand"m() Matll.

4. La clase Elevador implerncntu Ins interfaces EscuchaBoton.l. la cual muestru todos los metodas de III lnterfuz.24. ya que las interfaces no conticncn atributos.haPuerta public void puertaAblertal EventoPuerl:a pubUc void puertaCerrada I E:ventoPuertil Figura 12.~rlu reuhZl~eJ(}nJ1U"c.e genero a partir de la figura 12.27. colocamos la interfuz complctn EscuchaPuerta en el diagramu de clases de la figura 12. De actlerdo con la especiticacitin de UML version 1. .cacion.a eventoPuerta I} I} Figura 12. Finalmente. Esta notacion distingue a lu intertnz EscuchaPuerta como una interfaz de lava en nuestro sistema. de manera que POdUlllOS mcdelarlas interfaces de Java.1erta en UML. Cilia flguru 12. En In linea 43 se utiliza el metoda rotate de Graphics2D 20 veces. Javu Com· munity Process). Cuando una Puerta se abre 0 cierra. pero solamente si In Persona esul rcgistrada con esn Puerta para recibir even.26 La close Persona . el cstereotipo « Interfnzlavu » extiende a UML. espccll1c. Sin emhargo.13. En el apendice E annliznremos nuevamente In figura 12. La clase ConductoElevador impkn~entu las intcrf~ces ~scuchaLuz.24. que modele a 10 close Persona la Interfoz EscuchaPuerta. Timbre y Boton hnplernentan hi intertaz EscuchaMoverElevador. En la figura 12.Un estereotipo es una extension de UML. micnto de en medio en la interlaz EscuchaPuerta csui vacfo. !/ constructor public Persona () () . La figure 12. EI cfrculo pequerio represenra 1u intcrfuz.ion ubl. java / / Generado a partir public CLlSS p"rsona de la figura 11.538 Graficos y Java2D CapITulo 12 capITulo 12 Grancos y Java2D 539 punto del origen. reolizando la Interfaz 9 10 11 12 13 14 15 16 2. Por ejemplo. Por ultimo.ue. EI Elevador informa a su Puerta de su llegada. cuando comencemos a codificar nuestro modele. eventoPuert. pr i vat e boolean movimi ent o ' true.27. Consulte estes dlagrumas cuando cstudie In irnplcmentncion de lu simulucian del clevador en los apendices G.9 (Ejemplo prccnco opcional) Acerca de los objetos: Diseno de inierfaces con UML En la seccion 11. la comunidad de Java estu desurrolJando una asignllcion de UML a Javil que incluye elllsiereolipo " lnterti. private UbLcac. reallzondo Realizaciones UML expresa la rclacion entre una clase y una interlaz a travcs de unu rculizacion. Figura 12. De acuerdo con In flguru 12. (] imple. en vez de solidu.25 es el diagrumu can elementos omitidos de la figura 12.I / llH!-tocios de Escuc.24 para empezar a construir Persona. al hucer esto sacrificamos III informaclon acerca de sus comportamientos. . racion que se cncargu de la entrada y salida de pasujeros al elevador. Par 10 tanto. Un dlugrama de clases puede mostrur una realizacion entre las clases y las interfaces.c.25 se rnuestra la mnnera alternutlva para representar la realizncion de la clasc persona y la lnterfuz EscuchaP1. y potenciulmente des objetos Persona salen y entran ul Elevador despues de que ambas Puertas se abren. En este casu. de csta). Il c l. EI argumento especiflca el ungula de giro en rudianes (can 360' = 211radiunes). Jas interfnces no tienen atributos. AI dcclurar cualquier c1~s. tos tipo EventoPuerta. En esta seccion IlIDStrlUnOS como rcpresentar interfaces y rcalizucioncs con UML. En la Iigura 12.' En In figura 12. Modelurcmos la reali~aci()~ de la interf:l~ Escuc~aMoverPersona en lu sccciun 14.13 rnodelaremos como c1 usuario interucuia con nuestru simulucion.24 se rnodela la renlizacion entre In clase Persona y la interfaz EscuchaPuerta. La instruccion for de las linens 42 a 51 dibujan la estrella EscuchaPueria 12.zJaVI\ • (Slllicitlill de especificaci6n Juva 26). Esta Puerta ubre Iu Puerta del Piso al que llegn el Elevador. observe la pnlahru "Intcrfuzlava" colocadu entre los signos (<< »).24 implements EscuchaPuerta 5 6 7 8 /1 atributos private int 10. las clases Puerta. EscuchaPuerta y EscuchaTimbre.28. visite d sitio www. La relacion entre Persona y EscuchaPuerta parcce ser similar u una generalizacion. EI proceso de aplicar ingenierfa hucia delante de UML a codigo irnplcmentado en Java se bcn~~dade los diagnllilas de reallzucion bien construidos.24 Dlogroma de closes que modelo a 10 close Persona EscuchaPuerta. obtenierulo su manejudor a traves de un objcto Ubicacion (cl cun] se incluyo en el evento de llegada). erg. ginindola alrededor del nuevo para girar la siguiente figura a mostrnr. . En Ius Hneas 6 a 8 y en las llneas 14 y 15 se declaran los atributos y operaciones de Persona. con la excepcion de que In llechu que expresa la relacion es punteada. In clase Persona Implement" In mterfaz. Mediante el Proccso de la comunidad Java (JCP. Observe que el compani. y In linea stilida represcnra lu realizucion. java. incluyendo aquellos requeridos por lu interluz Escuchapuerta. AI construir un diagrama con elementos omitidos.27. Una clase realira. menta.itido5 de las re~liz~cion~s en nuestro modele del elcvador. 10 cuul mejora su leglbilidud: sin embargo. En la seccion 14. EscuchaBoton y EscuchaPuerta. Tumbien presentamos diagnmas de clases que muestran las interfaces de escucha y sus realizaciones par~ IlltCstr:lsimulacion del elevador. modelumos las interfaces en la figura 12. Enesta seccion repre. los comportamientos de una interfuz. Tambicn hnblarnos sobre las interfaces de escucha. En In linea 50 se utiIizu el metodo fill de Graphics2D para dibujar una version rellena de In estrella.9 incorporamos el manejo de eventos en nuestra simulacion.25 Dlagrama de closes con elementos omltldos. In pnictica conuin es colocar la informacion relacionuda can cualquier comportamiento en un diugrama separado: par ejcmplo. ~scuchaPuert-a. Para obtener Imis infllrmacitin sohre et JCP.24.u e clase v su lnterfuz (esa clase "implemcntnni" a la interfuz y redefinini los metoda. 1 2 3 4 / / Persona. r. Par ultimo.debe. Al ocultar SIIS operaciones.28. Los elementos que sc colocan entre los signos « » se conocen como estereotipos on U1v1L. ubicudos en el primer companimicnto de la interfaz EBcuchaPuerta. sentaremos a nuestra interfaz de escucha can UML. esa Puerta invocu al metodo upropiado que esui declarado en la inted'az EscuchaPuerta. EI diagrumu con elementos omitidos no ticne rnngun mctodo de intcrfaz (haciendo que cl diagrnma sea fiicil de leer). Ius interfaces de Java pueden lener ulributos (en formu de campos statio final).26 se muestra In implernentacian de Java para In figuru 12. modificando el diagrama de colabo. jcp. condensumos la interfuz. presentamos un modele con elementos 0~. utilizamo~ la Iigura 12. Incluimos tanto el manejo de eventos como la hcrencia en ese diagrama.

• Java proporciona lu clase JColorChooser para mostrar lin cuudro de dialogo para seleccionur colores. • Los metodos draw3DRect y fi1l3DRect ternan cinco argumcntos que especlficnn lu esquina superior izquierda del recrnngulo. verde y azul en UII objeto Color. La licha HSB le perrnite seleccionar un color con base en 01 mutiz. control undo In muneru en que muestrun los pfxeles. quitundo cualquier dibujo anterior. (Parte 1 de 2.0 Figura 12. como descubrir una veutnna. etcetera.) . Font.0 a 1. • El constructor de la clase Font lorna tres argumentns: el nornbre. getGreen y getBlue Lie Color devuelven valorcs enteros de 0 a 255. • Los metodos getRed. l tarnailodel tipo de letra sc mide en puntos. EI metcdo getl'ont" Metrics de Graphics sin argumontos obtieae el objeto E'ontMetrios pura 01 tipo de letra actual. la saturackin y el brillo.r (la coordenada horizontal) Y una coordenada y (In coordenada vertical). El cstilo del tipo de letra puede ser Font.0). lo~ cualesreprcscntun la cantidad tic rojo.0. • Java utiliza colores RGB. El metoda showDialog de JColorChooser muestra un cuadro de dialogo paraseleccionur colores y devuelve el objeto Color seleccionado. y despuesupdate llamaa paint direcramcme. PLAIN. El metoda setColor de Graphics establece el color actual para dibujur. verde y azul del color. • El metodo repaint solicita unn llamuda al metoda update de Component In mas pronto posible para borrar 01 fendo del objeto Component. La cluse Color proporcionu 13objetos Color previumente declarados. Figura 12. la anchura y altura del rectangulo. verde y azul son enteros en el rango de 0 a 255. • Los objetos Graphics contiencn metodos para dibujur. Un objeto Graphics admiuistra un contexte de gnillcos. La ficha RGllie permite seleccionar un color utilizando con troles deslizubles paru los componentes rojo. Un pixel es la unidad de resolucion mus pequeiiu de un monitor de computadora. • El metoda setBackground de Component cambia cl color de fondo de UII componcnte.28 EscuchaMoverElevador Dlogramo de closes para las interfaces de escucno. y si el rectangulo va call relieve 0 sin 61. El Hombre del tipo de letra puede ser cuulquier tipo de letru soportadopor el sistema. • Las unidadcs de coordenadas se miden en ptxeles. ITALIC 0 Font. . 0 valores de punta flornnte en el range de 0. BOLD. munlpular tipos de letra y colores. (Parte 2 de 2. estilo y tamuno del tipo de letru. • La clase Color declura metodns y coustantes para manipular colores en un progruma de Java.) RESUMEN • Un sistema de coordenadas es un esquema para identificar todos los posiblcs puntos en In pamallu. • Un contexte de gnillcos en Juva permite dibujar en IIIpnntalla. E • El metoda setFont de Graphics cstahlece el tipo de lctra parn dibujnr. • El metoda paint normalmcnte se llama ell respuesta a un evento. • El metodo getColor tie Graphics devuelve lin objeto Color que represcnta 01 color actual para dibujur. • El cuadro de didlogo JColorChooser predeterrninado lc permitc seleccionar un color de unavaricdadde mueatrasde colores. El metodo getFontMetrios de Graphics can un argumento Font devuelve el objeto FontMetric8 de esc objeto Font. Un par de coordenndus esui COInpuesto de una coordenuda .27 Dlograma de closes que modela las realizaclones en el modelo del elevador.28 Dlagrama de closes paro las Interfaces de escucho.540 Gratlcos y Java2D CapITulo 12 capftulo 12 Graflcos y Jovo2D 541 EscuchaBoton EscuchaPuerla EscuchoTlmbre EscuchaLuz EscuchaBoton EscuchaPuerla EscuchaPuerla Figura 12. • La esquiua superior izquierda Lieun componente de la GU! tiene las coordcnadus (0. en donde los componentes de color rojo. • La clase FontMatrics decluru varies metodos para obtener In metrica de los tipos de letra.

tipo de letra moveTo. metodo de Graphics2D Shape. metoda de Graphics2D RoundRectangle2D.r de cadu punta. EI quilllo argumcuto espcdtica el ungulo iniciaL EI sexto especilica cl lingula tinal. Double.truye a partir de IfnelL. TERMINOLOGiA addPoint. clase componentc vertical contexto de graJicos coordenada coordenadu x coordenadu y desccndentc lfneu bnse 1 ineTo. metoda de Graphics getGreen. y los ulthnos dos nrgurnentos (anchuraArco y al turaarco) determinnn los didmetros vertical y horizontal de los areas utilizados parn representor las esqulnas. metodo de Graphica2D valor RGB EJERCICIOS DE AUTOEVALUACI6N 12. • Los lIrgumentos del consttuctor de Line2D. metoda de Font Juvu2D.Ol.542 Graficos y Javo2D CapITulo 12 capfiulo 12 Graflcos y Javo2D 543 • Los metodos drawRoundRect y fillRoundRect dibujun rectangulos can esquinas redondeadas. • EI constructor de RoundRectangle2D. Su arguU1cnto especitiea el ungulo de giro en radiancs (en donde 360' = 21t radiunesi. metodo de G. • La clasc GradientPaint dibujn una flguru en un color que cambia gradualrnenre.'aint de Graphics2D estublccc el objeto paint que determinu el color y la textura para In figura a mostrnr. Graphics cje. metoda de Graphics fi1l0val. metodo de Graphics Ulll. metodo de GeneralPath nombre de tipo de letra objeto de gnificos ovalo Paint. metodo de GeneralPath metricu de los tipos de letra Monospaced.ia una Ifnea entre dos puntos. metodo de Graphics fi11Rect. se extiendeu en sentido contrario de las rnanecillas tiel rcloj se rniden en gradox posln. c) EI metoda de la chlse Graphics dibu. • EI metoda fill de Graphlco2D dibuja un objeto Shape relleno. • Para acceder a las herramientus de Graphics2D. • Los metodos drawOval y fillOval taman los mismcs urgumentos: la coordenudu de lu esquina superior izquierdn y la anchura y altura del recuingulo dellmitador que contiene al ovalo. Los urcos que. metoda de Graphics drawOval. de tal forma que el rellcno cambie gl'lldualmente de un color a otrll. metodo de Calor getSize. Double recibe cuatro urgumentos que especitlcan las coordenadas x y y de la esquina superior izquierdu. In anchuru y In altura del arco utilizados paw dcterrninur In redondez de Ins esquinas. metodo de font GradientPath. tipo de letru setColor.'olygon. rnetodo de Color getDescent. la unchura y In altura del reculngulo.aphicD drawPolylina. SystemColor o Tel(turel. clase recningulo delimitudor rotate. EI metoda rotate tie Graphics2D se utiliza pant girar lu siguicnte t1gura it mostrar. metodo de Graphics fillRoundRect. y los angulos que sc cxtiendeu en sentido u favor de Ius mnnccilhu del relo] se miden en grades negatives. clase Rectangle2D. los argumentos tercero y cuurto especifican la anchura y al tura. vas. un arrcglo que contiene la coonlcnudu y de cada punta y 01 mirnero de puntos). metoda de FontMetrics getBlue.'ath dibuja una linea desde cl ultimo punta hasln el punlo espccilicado en la ultima Ilamuda n move To. clast: GeneralPath.Double. • La clase Bufferedlmage pucde utilizarsc pam producir inuigenes en color y escalu de grises. EI ohjeto l. Arc2D. metoda de Graphics drawRect.'IE. clase interiincudo i sBold.l.'aint utiliza In imagen almacenada en su objeto Bufferedlmage asocindo como In textura para rellcnar unu figuru.'oint de Polygon agrega pares de coordcnudusr y y a lin objeto polygon. la. metodo de Graphics drawRoundRect. conocido como degradudo. Cada nueva Uamada IllineTo dibuja unu Unea <lc! puntu anterior al punto IIclual. cluse getAscent. metoda de Graphic~ drawPolygon. intertuz SystemColor.Double. Otra version recibe un arreglo que contiene lu coordenuda . • Los polfgonos son Iiguras cerradas de varies hukis. Sus primeros dos argumentos especificun la csquina superior izquierdu.'olygon de Graphics muestra a un objeto l. mctodo de Graphics2D setStroke. metodu de Graphics Font. • EI metndo setStroke tie Graphics2D establece 1:1S carucrerlsticus de las lfuens utilizadas para dibujar una figura. pura procesar artc lineal. • Los rnctodos drawArc y fillArc taman los mismos urgurnentos: la coordenada de la esquina superior lzquierdu. clase Graphics2D. clase punto draw.'olyline de Graphics muestra una serie de lfnens concctadns. metodo de Graphics2D fi1l3DRect. Las polillneus son una secuencin de puntas conectados. la unchura y la altura del rcetlingulo dclimitador para el arco. • Los primeros cuutro urgumentos del conSU'llctor de Arc2D.'olygon. tipo de lctra Serif. se debe nplicur una conversion desccndcntc a IIIrclerencia Graphics que so pasa a paint. awt. • Una rula general es una Iigura que se con. clnsc Sans Serif. metodo de . interfaz pfxel poligono pohgono cerrudo pollgouo relleno Polygon.'ath de Generall.'EN). metoda de Font getRed. Y ~I dngulo del area especifica el numero total de grades husta los que se extendera el urco. metodo de Graphics setPaint. • EI constructor de Rectangle2D. metoda de FontMetrics getName. y el liltimo especilica el tipo de areo (A):'c2D . dl ROB son las iniciales de y _ e) Los tmnanos de los lipos de ktm se miden en unidades Ilmnadas _ t) Lu elilSC ayuda a espedticar el relleno PUI'llIIl)U figura. mctodo de Font iaPlain. compuestns de scgmentos rectos. IUctodo draw3DRect. cunles se reprcsentan con un objcto de la c1ase Generall. Todas las opefllcianes de dibujo Illilizuflin uhorll esu ubicllcion como si fuera (0. cl metod" tic lu clase establece las caructcrfsllcas de una linea utilizndu para dibujar una figura. metodo de FontMetrics getLeading. metodo de Font getStyle.'ath (paquete java. mctodo de Color getHeight. clase estilo de tipn de letra fill. • El mctodo drawl. cluse grade arco urco dclhnitadu par un rectangulo arCiluxtendicndose hast) un dngulc ascendenLC BufferedImage. metodo de Graphics drawLine. • Los urcos se extiendcn desde un ungula inicial hasta el mimero de grados cspeciflcudos por su angulo de arco. ruetodo de Font getFont.'aint puede ser un objeto Color 0 una instancia de las clascs GradientPaint. EI :ingu10 iniclul especifica en dundc empieza el arco.1 Complete las siguientcs oracioncs: u) En Java2D. lIlilizundo un putron dibujudo en \111 objcto BufferedImage. clase component. clase fi1lArc. metodo de Graphics getFontMetrics. metoda de Graphics setFont. • EI metodo translate dc Graphica2D despluza d (lrigen del dibujo hacia una nueva ubiencion. Double. y los argumcntos angulolnicial y arcoxngulo que especificun la extension del arco. la anchura y altura del recuingulo dclimitador que conticne nl area. metodo de Polygon altura del srco anchurn del arco ArC2D. clasc TexturePaint. metoda de FontMetrics getFamily. • iii constructor de Ellipse2D. Double rccibe seis argumentos que espccifican IlL~ dimensiones del rectangulo. y muestrn el polfgona correspondlcnre. Double especiticun las cO()l'denadas x y y de IIIesquina superior izquierdu. metoda de GeneralPath color de rondo color. • EI metodo moveTo de GeneralPath cHpecifica el ptimcr punto en una ruta generaL El metoda lineTo de Generall.rectas y curvas complejas. • EI meiodo setl. 0).Double. rnetodo de Graphics grades negutivos grades positives Graphics.'ath dibuja Imll Hnell hllsta el Higuicnte punta en In rum general. .t eje y Ellipse2D. EI melodo closel. rnctodo de Graphics drawArc. clase cloaePath. un urreglo que contiene la coordenada !' de cada punto y cl numcro de puntas en el palfgono. geom). bl La elase ayuda a espccificur el rcileno pal'll ullul1gUnt.claae tipo de letra translate. • Un objeto Texturel. • Una version del metodo draWl. metoda de font isItalic. especilicadns por sus argumcntos (un nrreglo que contiene III coordenada x de cadi! punto. clase FontMetrics. • La API laval!) proporciona hcnumientas para gnificus bidimensionules avanzudus. CHORD 0 Arc2D. intcrfuz sistema de coordenudus Stroke. API Line2D. Double rccibe cuatro argumentos los cuules especifican el recuingulo delimitador para ln clipse a mostrar. • EI metoda draw dc Graphics2D dibuju lin objeto Shape. • EI metoda addl. para convertirla en una referencia Graphics2D.'aint de In API Juva2. tcxto e inuigenes. Double cspccitican las coordcnadas inicial y t1nal de 1:1 Hneil.

por parte del usuario. f) La coordenada de pixel (0. dibdjelas can dcgradadas geuerudos al azar. Despues de dibujar lOt) lfnens.16 Moditiquc su solucion ul ejcrcicio 12. BOLDI'l'ALIC no es un estilo de tipo de letru viilido. utillzando el metodo drawLine de III clase Graphics. a) EI nlctodo draWl?olygon conceta uuloilluticuillonte los pumas de los extremos del pol(gono.start().26 Produzca una version gratiaa del problema del Pasco del caballo (ejel'cicios 7.20 Escriba una aplicackm que simule un protector de puntalla. Double y el mctodo draw de la clase Graphics2D. en centfmetros. 12. verde. Conteste con verdadero 0 falso a cada una de las siguientes proposicianes. setColor ( Color. w. Los efrculos deberan cstar separados par 10 pixeles.8 12.6 12. Suponga que g es un objeto Graphics. c) Verdudero. y . b) En el sistema de coordenudus de Java.la celda apropiada del tublaro de ajcdrcz dcben! actuulizarsc con cl numcro de Illovimien- 12. u) Los primeros dos argumentos del metodo drawOval de Graphics cspecifican la coordcnada central del ovalo. d) En 01 sistema de coordcnadas de Java. c) False. til Verdadcro. Use el metodo drawLine. los valores de x se lncrementan de izquierda a derccba. dibujc Uncas en vez de :L~teriscos (*). Implcmente d djbujo con cal'llcteristlcas de In API Java2D.setColor( Color.19 En cl ejercicio 3. circunferencia y arc" utillzando lin objetD Illlipse2D.17 Escribu un prognuna que dibuje un tetrucdro (una figura tridimensional eon cuutro earns triangulurcs). Usc un objeto JTextField para obtener el valor. los valores de y se incrementan de arribn hacia abajo. 7.5 12. ). 12.25 MOdifiquc su solucion al ejcrcieia 7. c) Font. En el constructor para su clusc. en su cluse. &Observo ulgun problema con esto en su sistema? 12.3 RESPUESTASA LOS EJERCICIOS DE AUTOEVALUACI6N 12.20 panl elimluar lu llamndu a repaint dcsde d metodo paint. el radio de un cfrcu10 y que mostrabu el dhimetro. en caso de ser falso. a) Graphics2D. Usc cI mctodo draWOval de la clase Graphics. cscriba las siguientes insuucciones: temporizador = new Timer ( 1000.21 puru permitir ul usuario introducir el mimero de Ifneas ulcutorias que deben dibujarse antes de que la apllcucion sc borre 11 sf misma y ernpiece a dibujar lincas otra vez. d) Rojo. Para obtcncr un lipu de letra en cursiva y negrita.21 (Gni/ico. Esto creu unu instuncia de IIIclusc Timer que llamura al metoda actionl?erformed milisegundos (es decir. no un String. c) drawLine.23 Y 7. cxpliquc par que.6. multiplicando e1 mlmero de posiciones por 10 (0 cualquicr vulor que listed clijal.1 12. Use elmetouo drawArc. La coordennda (0.2 u) setStroke. Font •BOLDITALIC .11 Escriba un progrnmu que rnuestre trhingulos gencrndos al azar en dis tint os colores. gJ La claso Font hereua directamentc de la c1use Graphics. lEI merodo actionPerformed debera simplcmentc llarnar a repaint). La apllcucinn dehcni dibujnr linens al uzar. truduzcu cI numero de pnsicioncs en un numel'o de pixeles cn IIIpuntallu.12 Escriba un progruma que dibuje came teres . Usc una clase inlema para realizar elmanejo de eventos para el objeto JTextl'ield. swing contlene una clasc llumuda Timer. coloque una llamuda a repaint C0\l10 IIIultima linea on el metodo paint. e) La dase Graphics hereda direct:nllcnte de la clase Obj ect. Cudu tridngulo debora rellenarse con un color distinto.2 Gr6ftcos y Java2D Copfiulo 12 capitulo 12 Gr6ficos y Java2D 545 Conteste con verdadero 0 false a cada una de las siguientcs proposiciones. Adctnas. 1/ borrar rectangulo en (x. EI usuaria debeni ser capaz de esctibir un nuevo nlitnero cn el objeto JTextField en cuulquier momenlo dunulle la ejccuci6n del programa. c) EI metoda fillPolygon dihuja un polfgono solido en el color actual. toma un objcto Font como argumento. b) Los metodo« draw y fill de In cluse Graphics2D requieren un objeto de tipo COIllOsu argumento. Despues dlbuje cl cfrculo y muestre su didmetro.10 Modifique su solucion al ejcrcicio 12. Escriba un progl'uma que dihujc una serie de ocha cll'culos ellnccntlicos.18 Escriba un progruma quc dibujc un cubo. Declare su clase de mancra que lmplemente a ActionListeller. 12. y. d) Yellow debe estar en maytisculas. this temporizador.22. 12. b) GradientPath. metliunle el usn de objetos JTextField y JButton. 12.15 Escriba uu prngrumu que dibuje una cuudncula de I() por 10. b) Verdadcro. I 0 para leer un conjunto de coordenadus adermis del radio. 12 ). 12. 0) se cncuentra exactumente en el centro del monitor. 12. en colores aleatorios. Use III clnse GeneralPath y el rnctodo fill de la clase Graphics2D para dibujnr los Il'iangulus. llamada temporizador. b) EI metoda drawLine dibuja una linea entre dos puntas. II cambiar color a amarillo 12. 1) Te::tturePaint. Use la clase Line2D. Use la dase Gradientl?aint para gcnerw' el degradado.3 EJERCICIOS 12.9 . 12.Use metodas de la clusc Graphics. t) La clase Graphics cs una elnse abstract. Pnra pennitir al progrumu dibujnr en tonna continua. use Font.la cual es capaz de llamar al metudu actionl?erfonned de la lnterfaz ActionListener durante un intervnlo de tiempo lijo tespccificado en milisegundos). d) g. YELLOW ). ITALIC. d) EI mctodo de Graphics2D eslablece el color pm'a pintar en figuras de Juva2D. c) EI nu!todo £ illArc utiliza grados para especilicar el angulo.15 puru dibujar la cuudrfcula utilizando insruncias de la clase Rectangle2D. Double para reprcscntar cl cfrculo y el metoda draw de In clase Graphics20 purn mostrar el cfrculo. cndu segundo). la apllcaciun dehcni borrursc a sf misma y empezar a dihujar linens nuevumente. d) EI rnetodo drawArc permite angulos negurivos.0) corresponde a la csquina superior izquierdu de un cornponente de In GUI.14 Modltiquc su solucion al ejercicio 12.Yellow ). EI paquete javax.7 12. Modifique su salucian al ejercicio 12. Escriba un programa que dibuje una seric de ocho circulos eonccntricos. 12. Use el rnctodo drawRect. en distintos tamafios y colores de tlpo de letra. Los tumaiios de los tipos de letrn so miden en PUUIOS. eJ EI metoda getSize devuelve el tamwio del tipo de letra actual.23 Modifique su solucion al ejerciciu 12. y) 0) Font f = new Font ( "Serif". de tul forma que utUicc In gcncraci6n de mlmeros aleatarios para selec" cionar difcrcntes figuras a l11oslrar.9 para dibujur lfueas aleatorias en colorcs aleutorius y grosores de llneualeatorios. Para las ftgunls como rectangulos y clipscs. IO listed escribi6 un applct que recibja como entrudu. Encuentre eltlos) errortes) en cada una de las siguientes instrucciones.l' de tor(uRrl) para agregar una illlCrftlz grafiea de usuario. 12. en caso de ser false. y cl metodo draw de lu clasc GrapDou- 12. 12.21. 12. h).13 Escriba un prognllna que dibuje una cuadneulu de 8 por 8.24 Moditiquc su soluei6n al ejercicia 12.erase( x. del objeto this cada 1000 12. A mcdlda que se malice eada movimiento. circunfcrenciu y area de esc cfrculo. Use la clasc GeneralPath hics2D. Los cfreulos deboran estar separadas por 10 pixeles. a) g. Modifique su salucitill ul cjcrcicio ). azul. Los prirneros dos urgumentos especlficun la esquina superior izquierda del recuingulo delimiuulor. COIllO en: g.II azur. 12.23 para ulilizw' elllSes y herramientns de dibujo de la API Juva2D. no tlene un metodo erase. ble y el metodo draw de la clase Graphics2D. Fulso.544 12. en 01cual ocurre el dibujo. Use lu clase GeneralPath y el metodo draw de la clnsc Graphics2D.22 Modltique su solucion al ejercicio 12. Escriba un programu que dibuje !fncas de longitudes aleutorias. y explique como corregirlos. t) False. Declare una variable de instancia de tipo Timer. 12. b) g.13 pant dibujar la cuudncula utilizundo instancias de la clase Line2D. Mndifiquc su solucion IIIejercicio 12. c) Puntas.4 Complete las siguicntes oraciones: a) La clase de lu API Java2D se utiliza para dibujar ovalos. Coundo d prngmma de graticos de tortuga espccifique un mnvlmicnlo.21 He nqui un udelanto. setFont ( "SansSerif" ). Debe utilizurse el metodo clearRect. Double y 01 mctodo draw de la cluse Graphics2D. para dibujar los ovalos mediante el usa de instancias de lu clase Ellipee2D. c) Las tres constuntcs que especlflcan 01 estilo de los tipos de letra son .. a) El metodo setFont b) La clase Graphics 12. BOLD + Font. Double y el metodo draw de la clusc Graphics20 para dibujar las lmcas. explique par que.26).

CaLToIl aquei que entre uqui. y el metodo fill de la cluse Graphics2Dparu renliznr el dibuju. Si el resultndo del prngrumu es un paseo complete 0 un paseo cerrado. campos de texto y paneles.24) para que le ayude con In animucion del Pasco del caballo. para que cuente con nil area de gnificos mas grande. ce la cluse Rectangle2D. ctiqueras. Double y el metodo fill del pastel en un color distinto. tuga y In llebre deberan corrcr hncia arriba de In moutaiiu. • Aprendcr uutilizar los ndministradnres de esquemas. Simule la montana dibujan. 12. Cada segunuo debora realizurse el siguientc movimiento. cl programa debera mostrar un rnensujc apropiado.olorlugo y la ticbn: (ejercicio 7. Si 10 deseu.28 Escriba UIIprogruma 'Inc utilice el metodo drawPolyline para dibujar UIlU espiral. en cadu movimlcnto. rclacionados Aprcndcr acercu de los puquetcs que contienen componentes con Ius Gllls. Componentes de la interfaz grafica de usuario: Parte 1 Comprender los principles de diserio de las interfaces gnificas de usuurio (GUI). abandonu toda esperunzu! Alighier! . 12.\' que pucdo escuchar todo e! d(a colas cosos? . puede utilizar In cluse Timer (ven el cjercicio 11. • Entcudcr los cventos de raton Y lo~ evcntos de tcclado. I 12. listas.29 Escribu un programa que recibu como entruda cuatro ruimeros y que los graflquc en forma de grdfico de pastel.15). Use In clase Arc2D. Utili. hastu la parte superior derecha. Double de la clase Graphics2D pam realizur el dibu]o. do un arco que se extienda desde la parte inferior izquierdn de In vcntana.30 Escriba un apple! que reciba como entrada cuatrn mimeros yque los grufique en forma de gniticu de barrns. lrnplemente la salida gnifica de manera que la tortuga y la liebre se impriman en el arco. [Now: Extiendu In longitud de la currera Lie 70 a 300. La tor.546 Gr6ficos y Java2D to apropiado. Dihujc cudu pieza 12. los profelos mtis sabios se asegunu: primcro de! even/a. clases c interfaces para manejo de • Crear Ymanipular botones. Walpole ieree. Crear interfaces gnificas de usuario. Dibuje cada barru en un color dlstinto.27 Produzca una version grafica de ill sirnulucion i.

Sign up to vote on this title
UsefulNot useful