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