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