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