566

Capítulo 12 Gráfi cos y Java 2D™

Óvalos, rellenos con degradado y objetos 

Paint

La primera fi gura que dibujamos es un óvalo relleno con colores que cambian gradualmente. En las líneas 28 y 
29 se invoca el método 

setPaint

 de 

Graphics2D

 para establecer el objeto 

Paint

 que determina el color para la 

fi gura a mostrar. Un objeto 

Paint

 implementa a la interfaz 

java.awt.Paint

. Puede ser algo tan simple como 

uno de los objetos 

Color

 previamente declarados, los cuales se presentaron en la sección 12.3 (la clase 

Color

implementa a 

Paint

), o el objeto 

Paint

 puede ser una instancia de las clases 

GradientPaint

,

SystemColor

,

TexturePaint

,

LinearGradientPain

o

RadientGradientPaint

de la API Java2D. En este caso, utilizamos un 

objeto

GradientPaint

.

La clase 

GradientPaint

 ayuda a dibujar una fi gura en colores que cambian gradualmente (lo cual se conoce 

como

degradado

). El constructor de 

GradientPaint

 que se utiliza aquí requiere siete argumentos. Los primeros 

dos especifi can la coordenada inicial del degradado. El tercer argumento especifi ca el 

Color

 inicial del degrada-

do. Los argumentos cuarto y quinto especifi can la coordenada fi nal del degradado. El sexto especifi ca el 

Color

fi nal del degradado y el último especifi ca si el degradado es 

cíclico

 (true) o 

acíclico

 (false). Los dos conjuntos 

de coordenadas determinan la dirección del degradado. Como la segunda coordenada (35, 100) se encuentra 
hacia abajo y a la derecha de la primera coordenada (5, 30), el degradado va hacia abajo y a la derecha con cierto 
ángulo. Como este degradado es cíclico (

true

), el color empieza con azul, se convierte gradualmente en amarillo 

y luego regresa gradualmente a azul. Si el degradado es acíclico, el color cambia del primer color especifi cado (por 
ejemplo, azul) al segundo color (por ejemplo, amarillo). 

En la línea 30 se utiliza el método 

fill

 de 

Graphics2D

 para dibujar un objeto 

Shape

 relleno (un objeto que 

implementa a la interfaz 

Shape

 del paquete 

java.awt

). En este caso mostramos un objeto 

Ellipse2D.Double

.

El constructor de 

Ellipse2D.Double

 recibe cuatro argumentos que especifi can el rectángulo delimitador para 

mostrar la elipse.

Rectángulos, trazos (objetos 

Stroke

)

A continuación dibujamos un rectángulo rojo con un borde grueso. En la línea 33 se utiliza 

setPaint

 para 

establecer el objeto 

Paint

 en 

Color.RED

. En la línea 34 se utiliza el método 

setStroke

 de 

Graphics2D

 para es-

tablecer las características del borde del rectángulo (o las líneas para cualquier otra fi gura). El método 

setStroke

requiere como argumento un objeto que implemente a la interfaz 

Stroke

 (paquete 

java.awt

). En este caso, 

utilizamos una instancia de la clase 

BasicStroke

. Esta clase proporciona varios constructores para especifi car la 

anchura de la línea, la manera en que ésta termina (lo cual se le conoce como 

cofi as

), la manera en que las líneas 

se unen entre sí (lo cual se le conoce como 

uniones de línea

) y los atributos de los guiones de la línea (si es una 

línea punteada). El constructor aquí especifi ca que la línea debe tener una anchura de 10 píxeles.

En la línea 35 se utiliza el método 

draw

 de 

Graphics2D

 para dibujar un objeto 

Shape

; en este caso, una ins-

tancia de la clase 

Rectangle2D.Double

. El constructor de 

Rectangle2D.Double

 recibe cuatro argumentos que 

especifi can las coordenadas 

x y y de la esquina superior izquierda, la anchura y la altura del rectángulo. 

Rectángulos redondeados, objetos 

BufferedImage

 y 

TexturePaint

A continuación dibujamos un rectángulo redondeado, relleno con un patrón creado en un objeto 

BufferedIma-

ge

 (paquete 

java.awt.image

). En las líneas 38 y 39 se crea el objeto 

BufferedImage

. La clase 

BufferedImage

puede usarse para producir imágenes en color y escala de grises. Este objeto 

BufferedImage

 en particular tiene 

una anchura y una altura de 10 píxeles (según lo especifi cado por los primeros dos argumentos del constructor). 
El tercer argumento del constructor, 

BufferedImage.TYPE_INT_RGB

, indica que la imagen se almacena en color, 

utilizando el esquema de colores RGB.

Para crear el patrón de relleno para el rectángulo redondeado, debemos primero dibujar en el objeto 

Buffered-

Image

. En la línea 42 se crea un objeto 

Graphics2D

 (con una llamada al método 

createGraphics

 de 

BufferedImage

)

que puede usarse para dibujar en el objeto 

BufferedImage

. En las líneas 43 a 50 se utilizan los métodos 

setColor

,

fillRect

 y 

drawRect

 (descritos anteriormente en este capítulo) para crear el patrón.

En las líneas 53 y 54 se establece el objeto 

Paint

 en un nuevo objeto 

TexturePaint

 (paquete 

java.awt

).

Un objeto 

TexturePaint

 utiliza la imagen almacenada en su objeto 

BufferedImage

 asociado (el primer ar-

gumento del constructor) como la textura para rellenar una fi gura. El segundo argumento especifi ca el área 

Rectangle

 del objeto 

BufferedImage

 que se repetirá en toda la textura. En este caso, el objeto 

Rectangle

 es 

del mismo tamaño que el objeto 

BufferedImage

. Sin embargo, puede utilizarse una porción más pequeña del 

objeto

BufferedImage

.

12_MAQ_CAP_12_DEITEL.indd566

4/19/081:27:04AM