144

Capítulo 4 Instrucciones de control: parte 1

PanelDibujo

hereda

,

JPanel

, aparece a la derecha de la palabra clave 

extends

. En esta relación de herencia, a 

JPanel

 se le conoce como la 

superclase

 y 

PanelDibujo

es la 

subclase

. Esto produce una clase 

PanelDibujo

 que 

tiene los atributos (datos) y comportamientos (métodos) de la clase 

JPanel

, así como las nuevas características

que agregaremos en nuestra declaración de la clase 

PanelDibujo

; específi camente, la habilidad de dibujar dos líneas 

a lo largo de las diagonales del panel. En el capítulo 9 explicaremos detalladamente el concepto de herencia.
 Todo 

JPanel

, incluyendo nuestro 

PanelDibujo

, tiene un método 

paintComponent

 (líneas 9 a 22), que 

el sistema llama automáticamente cada vez que necesita mostrar el objeto 

JPanel

. El método 

paintComponent

debe declararse como se muestra en la línea 9; de no ser así, el sistema no llamará al método. Este método se 
llama cuando se muestra un objeto 

JPanel

 por primera vez en la pantalla, cuando una ventana en la pantalla 

lo cubre y después lo descubre, y cuando la ventana en la que aparece cambia su tamaño. El método 

paint-

Component

 requiere un argumento, un objeto 

Graphics

, que el sistema proporciona por usted cuando llama a 

paintComponent

.

 

La primera instrucción en cualquier método 

paintComponent

 que cree debe ser siempre:

super

.paintComponent( g );

la cual asegura que el panel se despliegue apropiadamente en la pantalla, antes de empezar a dibujar en él. A con-
tinuación, las líneas 14 y 15 llaman a dos métodos que la clase 

PanelDibujo

 hereda de la clase 

JPanel

. Como 

PanelDibujo

 extiende a 

JPanel

,

PanelDibujo

 puede usar cualquier método 

public

que esté declarado en 

JPa-

nel

. Los métodos 

getWidth

 y 

getHeight

 devuelven la anchura y la altura del objeto 

JPanel

, respectivamente. 

Las líneas 14 y 15 almacenan estos valores en las variables locales 

anchura

 y 

altura

. Por último, las líneas 18 y 

21 utilizan la referencia 

g

 de la clase 

Graphics

 para llamar al método 

drawLine

, y que dibuje las dos líneas. Los 

primeros dos argumentos son las coordenadas 

x y y para uno de los puntos fi nales de la línea, y los últimos dos 

argumentos son las coordenadas para el otro punto fi nal. Si cambia de tamaño la ventana, las líneas se escalaran de 
manera acorde, ya que los argumentos se basan en la anchura y la altura del panel. Al cambiar el tamaño de la ven-
tana en esta aplicación, el sistema llama a 

paintComponent

 para volver a dibujar el contenido de 

PanelDibujo

.

 

Para mostrar el 

PanelDibujo

 en la pantalla, debemos colocarlo en una ventana. Usted debe crear una ven-

tana con un objeto de la clase 

JFrame

. En 

PruebaPanelDibujo.java

 (fi gura 4.20), la línea 3 importa la clase 

JFrame

 del paquete 

javax.swing

. La línea 10 en el método 

main

 de la clase 

PruebaPanelDibujo

 crea una 

instancia de la clase 

PanelDibujo

, la cual contiene nuestro dibujo, y la línea 13 crea un nuevo objeto 

JFrame

que puede contener y mostrar nuestro panel. La línea 16 llama al método 

setDefaultCloseOperation

 con el 

argumento

JFrame.EXIT_ON_CLOSE

, para indicar que la aplicación debe terminar cuando el usuario cierre la 

ventana. La línea 18 utiliza el método 

add

 de 

JFrame

 para adjuntar el objeto 

PanelDibujo

, que contiene nues-

tro dibujo, al objeto 

JFrame

. La línea 19 establece el tamaño del objeto 

JFrame

. El método 

setSize

 recibe dos 

parámetros: la anchura del objeto 

JFrame

 y la altura. Por último, la línea 20 muestra el objeto 

JFrame

. Cuando 

se muestra este objeto, se hace la llamada al método 

paintComponent

 de 

PanelDibujo

 (líneas 9 a 22 de la fi gura 

4.19) y se dibujan las dos líneas (vea los resultados de ejemplo de la fi gura 4.20). Cambie el tamaño de la ventana, 
para que vea que las líneas siempre se dibujan con base en la anchura y altura actuales de la ventana.

Ejercicios del ejemplo práctico de GUI y gráfi cos

4.1

  Utilizar ciclos e instrucciones de control para dibujar líneas puede producir muchos diseños interesantes.

 

a)  Cree el diseño que se muestra en la captura de pantalla izquierda de la fi gura 4.21. Este diseño dibuja líneas que 

parten desde la esquina superior izquierda, y se despliegan hasta cubrir la mitad superior izquierda del panel. Un 
método es dividir la anchura y la altura en un número equivalente de pasos (nosotros descubrimos que 15 pasos 
es una buena cantidad). El primer punto fi nal de una línea siempre estará en la esquina superior izquierda (0,0). 
El segundo punto fi nal puede encontrarse partiendo desde la esquina inferior izquierda, y avanzando un paso 
vertical hacia arriba, y un paso horizontal hacia la derecha. Dibuje una línea entre los dos puntos fi nales. Con-
tinúe avanzando hacia arriba y a la derecha, para encontrar cada punto fi nal sucesivo. La fi gura deberá escalarse 
apropiadamente, a medida que se cambie el tamaño de la ventana.

 b) 

 

Modifi que su respuesta en la parte (a) para hacer que las líneas se desplieguen a partir de las cuatro esquinas, 
como se muestra en la captura de pantalla derecha de la fi gura 4.21. Las líneas de esquinas opuestas deberán 
intersecarse a lo largo de la parte media.

4.2

  La 

fi gura 4.22 muestra dos diseños adicionales, creados mediante el uso de ciclos 

while

 y 

drawLine

.

 

a)  Cree el diseño de la captura de pantalla izquierda de la fi gura 4.22. Empiece por dividir cada fl anco en un núme-

ro equivalente de incrementos (elegimos 15 de nuevo). La primera línea empieza en la esquina superior izquierda 
y termina un paso a la derecha, en el fl anco inferior. Para cada línea sucesiva, avance hacia abajo un incremento 

04_MAQ_CAP_04.indd144

4/19/081:20:49AM