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