En las líneas 55 y 56 se utiliza el método
fill
de
Graphics2D
para dibujar un objeto
Shape
relleno; en
este caso, una instancia de la clase
RoundRectangle2D.Double
. El constructor de la clase
RoundRectangle2D
.
Double
recibe seis argumentos que especifi can las dimensiones del rectángulo, la anchura y la altura del arco
utilizado para redondear las esquinas.
Arcos
A continuación dibujamos un arco en forma de pastel, con una línea blanca gruesa. En la línea 59 se establece el
objeto
Paint
en
Color.WHITE
. En la línea 60 se establece el objeto
Stroke
en un nuevo objeto
BasicStroke
para una línea con 6 píxeles de anchura. En las líneas 61 y 62 se utiliza el método
draw
de
Graphics2D
para dibu-
jar un objeto
Shape
; en este caso, un
Arc2D.Double
. Los primeros cuatro argumentos del constructor de
Arc2D.
Double
especifi can las coordenadas
x y y de la esquina superior izquierda, la anchura y la altura del rectángulo
delimitador para el arco. El quinto argumento especifi ca el ángulo inicial. El sexto especifi ca el ángulo del arco. El
último argumento especifi ca cómo se cierra el arco. La constante
Arc2D.PIE
indica que el arco se cierra dibujando
dos líneas: una línea va desde el punto inicial del arco hasta el centro del rectángulo delimitador, y otra va desde el
centro del rectángulo delimitador hasta el punto fi nal. La clase
Arc2D
proporciona otras dos constantes estáticas
para especifi car cómo se cierra el arco. La constante
Arc2D.CHORD
dibuja una línea que va desde el punto inicial
hasta el punto fi nal. La constante
Arc2D.OPEN
especifi ca que el arco no debe cerrarse.
Líneas
Finalmente, dibujamos dos líneas utilizando objetos
Line2D
: una sólida y una punteada. En la línea 65 se esta-
blece el objeto
Paint
en
Color.GREEN
. En la línea 66 se utiliza el método
draw
de
Graphics2D
para dibujar un
objeto
Shape
; en este caso, una instancia de la clase
Line2D.Double
. Los argumentos del constructor de
Line2D.
Double
especifi can las coordenadas inicial y fi nal de la línea.
En la línea 69 se declara un arreglo
float
de un elemento, el cual contiene el valor 10. Este arreglo debe
utilizarse para describir los guiones en la línea punteada. En este caso, cada guión será de 10 píxeles de largo. Para
crear guiones de diferentes longitudes en un patrón, simplemente debe proporcionar la longitud de cada guión
como un elemento en el arreglo. En la línea 70 se establece el objeto
Paint
en
Color.YELLOW
. En las líneas 71
y 72 se establece el objeto
Stroke
en un nuevo objeto
BasicStroke
. La línea tendrá una anchura de 4 píxeles y
extremos redondeados (
BasicStroke.CAP_ROUND
). Si las líneas se unen entre sí (como en un rectángulo en las
esquinas), la unión de las líneas será redondeada (
BasicStroke.JOIN_ROUND
). El argumento
guiones
especifi ca
las longitudes de los guiones de la línea. El último argumento indica el índice inicial en el arreglo guiones para el
primer guión en el patrón. En la línea 73 se dibuja una línea con el objeto
Stroke
actual.
Creación de sus propias fi guras mediante las rutas generales
A continuación presentaremos una
ruta general
: una fi gura compuesta de líneas rectas y curvas complejas. Una
ruta general se representa con un objeto de la clase
GeneralPath
(paquete
java.awt.geom
). La aplicación de las
fi guras 12.31 y 12.32 demuestra cómo dibujar una ruta general, en forma de una estrella de cinco puntas.
1
// Fig. 12.31: Figuras2JPanel.java
2
// Demostración de una ruta general.
3
import
java.awt.Color;
4
import
java.awt.Graphics;
5
import
java.awt.Graphics2D;
6
import
java.awt.geom.GeneralPath;
7
import
java.util.Random;
8
import
javax.swing.JPanel;
9
10
public class
Figuras2JPanel
extends
JPanel
11
{
12
// dibuja rutas generales
13
public void
paintComponent( Graphics g )
Figura 12.31
| Rutas generales de Java 2D. (Parte 1 de 2).
12.8 La API Java 2D
567
12_MAQ_CAP_12_DEITEL.indd567
4/19/081:27:04AM