1
// Fig. 21.2: AnimadorLogoJPanel.java
2
// Animación de una serie de imágenes.
3
import
java.awt.Dimension;
4
import
java.awt.event.ActionEvent;
5
import
java.awt.event.ActionListener;
6
import
java.awt.Graphics;
7
import
javax.swing.ImageIcon;
8
import
javax.swing.JPanel;
9
import
javax.swing.Timer;
10
11
public class
AnimadorLogoJPanel
extends
JPanel
12
{
13
private final static
String
NOMBRE_IMAGEN
=
"deitel"
;
// nombre de la imagen base
14
protected
ImageIcon imagenes[];
// arreglo de imágenes
15
private final
int
TOTAL_IMAGENES
=
30
;
// número de imágenes
16
private int
imagenActual =
0
;
// índice de la imagen actual
17
private final int
RETRASO_ANIMACION
=
50
;
// retraso en milisegundos
18
private int
anchura;
// anchura de la imagen
19
private int
altura;
// altura de la imagen
20
21
private
Timer temporizadorAnimacion;
// objeto Timer que controla la animación
22
23
// el constructor inicializa el objeto AnimadorLogoJPanel, cargando las imágenes
24
public
AnimadorLogoJPanel()
25
{
26
imagenes =
new
ImageIcon[
TOTAL_IMAGENES
];
27
28
// carga 30 imágenes
29
for
(
int
cuenta =
0
; cuenta < imagenes.length; cuenta++ )
30
imagenes[ cuenta ] =
new
ImageIcon( getClass().getResource(
31
"imagenes/"
+
NOMBRE_IMAGEN
+ cuenta +
".gif"
) );
32
33
// este ejemplo supone que todas las imágenes tienen la misma anchura y altura
34
anchura = imagenes[
0
].getIconWidth();
// obtiene la anchura del icono
35
altura = imagenes[
0
].getIconHeight();
// obtiene la altura del icono
36
}
// fin del constructor de AnimadorLogoJPanel
37
38
// muestra la imagen actual
39
public void
paintComponent( Graphics g )
40
{
41
super.paintComponent( g );
// llama al método paintComponent de la superclase
42
43
imagenes[ imagenActual ].paintIcon(
this
, g,
0
,
0
);
44
45
// establece la siguiente imagen a dibujar, sólo si el temporizador está funcionando
46
if
( temporizadorAnimacion.isRunning() )
47
imagenActual = ( imagenActual +
1
) %
TOTAL_IMAGENES
;
48
}
// fin del método paintComponent
49
50
// inicia la animación, o la reinicia si se vuelve a mostrar la ventana
51
public void
iniciarAnimacion()
52
{
53
if
( temporizadorAnimacion ==
null
)
54
{
55
imagenActual =
0
;
// muestra la primera imagen
56
57
// crea temporizador
58
temporizadorAnimacion =
59
new
Timer(
RETRASO_ANIMACION
,
new
ManejadorTimer() );
Figura 21.2
| Animación de una serie de imágenes. (Parte 1 de 2).
21.3 Animación de una serie de imágenes
863
21_MAQ_CAP_21_DEITEL.indd863
4/19/081:32:49AM