Animar um IMAGEICON

possuo 3 imagens e quero que elas intercalem em determinado intervalo de tempo, no mesmo lugar…
tentei algo, mas sem exito, alguma ajuda??

fiz com while, botoes, Calendar

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package projetoanimeimageicon;

import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Calendar;
import java.util.GregorianCalendar;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

/**
 *
 * @author contanova
 */
public class ProjetoAnimeImageAnimacao extends JFrame  implements ActionListener{
   boolean trocaImagem=true; 
    ImageIcon parte1_robo = new ImageIcon(getClass().getResource("parte1_robo.png"));
    ImageIcon parte2_robo = new ImageIcon(getClass().getResource("parte2_robo.png"));
    ImageIcon parte3_robo = new ImageIcon(getClass().getResource("parte3_robo.png"));
    JPanel jPanel2 = new JPanel();
    JLabel jlabel1 = new JLabel();
    JLabel jlabel2 = new JLabel();
    JLabel jlabel3 = new JLabel();
    
    
    
     JLabel jlabel4 = new JLabel();
    JLabel jlabel5 = new JLabel();
    JLabel jlabel6 = new JLabel();
    JButton start = new JButton("start");
    
    
    
     public void actionPerformed(ActionEvent e) {
        if (e.getSource() == start) {
        trocaImagemComBotao2();  
            
        }
     }
    
    
    
    public ProjetoAnimeImageAnimacao() {
        setTitle("JOGO ROBO");
        setSize(900, 650);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        setResizable(false);
        Font fonte2 = new Font("Sans Serif", Font.BOLD, 12);
        Color myColor = Color.decode("#cc9d84");
        
        jPanel2.setBackground(myColor);
        jPanel2.setBorder(BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
        jPanel2.setLayout(null);
        jPanel2.setBounds(0, 0, 900, 650);

        jlabel1.setSize(128, 128);
        jlabel1.setLocation(0, 0);
        jlabel1.setIcon(parte1_robo);
        jPanel2.add(jlabel1);

        jlabel2.setSize(128, 128);
        jlabel2.setLocation(128, 0);
        jlabel2.setIcon(parte2_robo);
        jPanel2.add(jlabel2);

        jlabel3.setSize(128, 128);
        jlabel3.setLocation(256, 0);
        jlabel3.setIcon(parte3_robo);
        jPanel2.add(jlabel3);
        
        
        
        
        jlabel4.setSize(128, 128);
        jlabel4.setLocation(0, 150);
        jlabel4.setIcon(parte1_robo);
        jPanel2.add(jlabel4);

        jlabel5.setSize(128, 128);
        jlabel5.setLocation(128, 150);
        jlabel5.setIcon(parte2_robo);
        jPanel2.add(jlabel5);

        jlabel6.setSize(128, 128);
        jlabel6.setLocation(256, 150);
        jlabel6.setIcon(parte3_robo);
        jPanel2.add(jlabel6);


          start.setSize(100, 20);
        start.setLocation(10, 580);
        start.setText("start");
        start.setVisible(true);
        start.setEnabled(true);
        start.addActionListener(this);
        jPanel2.add(start);
        
        
        
        
        getContentPane().setLayout(null);
        getContentPane().add(jPanel2);

    //    contaTempo();
        
        jlabel4.setIcon(parte1_robo);   
        
        
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here

        new ProjetoAnimeImageAnimacao().setVisible(true);
        
      
  
  
    }
    
    
    
    
        private long limite;
    private long atual;
    // tempo de cada ciclo em segundos;
    private int ciclo = 1;
    
    public void contaTempo(){
           System.out.println("estive aqui");
           int j=0;  
   boolean trocaImagem=true;   
  while(j<10000){
            j++;
         //  System.out.println("j"+j);
          
           
              if(j%2==0){
               if(trocaImagem==true){
                    jlabel4.setIcon(parte1_robo);   
                  //  System.out.println("houve troca... XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");
                   trocaImagem=false;
               }else {
                    jlabel4.setIcon(parte3_robo);  
                    trocaImagem=true;
                //   System.out.println("houve troca...____________________________________________________________________________diferente...");
               }
            }
           //  atual = System.currentTimeMillis();
                    
             if ((j==7000)) { 
                // System.out.println("7000______________________________________");
                
            }
        }
    }
    
    
    
    
    
    
    
    
    public void trocaImagemComBotao(){
            
        int j=0;  

  //  if(trocaImagem==true){                   
       //            trocaImagem=false;}
  while(j<100000){
            j=j+103;
         //  System.out.println("j"+j);           
              if(j%2==0){
               if(trocaImagem==true){
                    jlabel4.setIcon(parte1_robo);   
                  //  System.out.println("houve troca... XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");
                   trocaImagem=false;
               }else {
                    jlabel4.setIcon(parte3_robo);  
                    trocaImagem=true;
                //   System.out.println("houve troca...____________________________________________________________________________diferente...");
               }
            }
  }//fecha while   
    }
    
    
    public void trocaImagemComBotao2(){
            
      
                     
                    jlabel4.setIcon(parte3_robo);  
                   // trocaImagem=true;
                //   System.out.println("houve troca...____________________________________________________________________________diferente...");
               }
           // }
 // }//fecha while   
  //  }
    
    
    
    
    
    
    
    
    
    
    
    
     private long novoCiclo(int segundos) {
       
        Calendar tempo = new GregorianCalendar();    
        tempo.setTimeInMillis(System.currentTimeMillis());   
        tempo.add(Calendar.SECOND, segundos);
        return tempo.getTimeInMillis();        
    }
}





isso ai vc pode fazer com thred…

é, mas como eu fiz com a thread, travou o jogo todo…
achei um excelente site agora… e estou estudando…

http://zetcode.com/tutorials/javagamestutorial/movingsprites/
http://zetcode.com/tutorials/javagamestutorial/
muitos assuntos.

e sobre a animação achei este aqui que vou estudar agora e ver se me serve,
http://zetcode.com/tutorials/javagamestutorial/animation/

tipo neste tópico aqui, tem códigos que usei thread e até funciona a animação se usar a tecla esquerda, o que chega a ser interessante, se houver movimento,
mas aí inclusive houve a dificuldade de existir o movimento de fato do sprite…

http://www.guj.com.br/java/299020-animando-sprites#1625557

raghy ainda há alguma dúvida?

na verdade continua a dúvida sim. pois não fiz esta animação com 3 imageicons, sem prejuízo de todo o sistema.

mostrava ali, o tópico onde tentei usar uma thread sem total sucesso ou coisa parecida.

vc pergunta, na verdade, para saber se ponho resolvido? Bem ainda não está resolvido.
Não entendi a conotação da pergunta? é possível ser mais claro?

Sim, a dúvida continua.

bem respondo pois pode interessar, consegui com um gif animado…
segue jar do jogo com animações…

raghy pergunto pois desejo lhe ajudar no que for possível. Basta esclarecer a dificuldade apresentada.

raghy fiz um exemplo bem simples de animação com ImageIcon / JLabel.

[code]import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class Sprite extends JFrame{

private ImageIcon imagensR[], imagensL[];
private JLabel sprite;
private Runnable andar;
private String sentido;
private int posicaoArray;
private Thread threadAndar;

public Sprite() {
	
	posicaoArray = 0;
	sentido = "direita";
	
	imagensR = new ImageIcon[4];
	imagensL = new ImageIcon[4];
	
	imagensL[0] = new ImageIcon(getClass().getResource("imagens/L.PNG"));
	imagensL[1] = new ImageIcon(getClass().getResource("imagens/L1.PNG"));
	imagensL[2] = new ImageIcon(getClass().getResource("imagens/L2.PNG"));
	imagensL[3] = new ImageIcon(getClass().getResource("imagens/L3.PNG"));
	
	imagensR[0] = new ImageIcon(getClass().getResource("imagens/R.PNG"));
	imagensR[1] = new ImageIcon(getClass().getResource("imagens/R1.PNG"));
	imagensR[2] = new ImageIcon(getClass().getResource("imagens/R2.PNG"));
	imagensR[3] = new ImageIcon(getClass().getResource("imagens/R3.PNG"));
	
	sprite = new JLabel(imagensL[0]);
	sprite.setBounds(100, 100, 110, 160);

	sprite.addKeyListener(new KeyListener() {
		
		public void keyTyped(KeyEvent evento) {}
		
		public void keyReleased(KeyEvent arg0) {}
		
		public void keyPressed(KeyEvent evento) {
			if(evento.getKeyCode()==KeyEvent.VK_RIGHT){
				posicaoArray=0;
				sentido="direita";
			}
			else if(evento.getKeyCode()==KeyEvent.VK_LEFT) {
				posicaoArray=0;
				sentido="esquerda";
			}
				
		}
	});
	
	sprite.setFocusable(true);
	add(sprite);
	
	andar = new Runnable() {
		
		public void run() {
		
			while (true) {
			
				if(sentido=="direita"){
					sprite.setIcon(imagensR[posicaoArray]);
					sprite.setLocation(sprite.getLocation().x+50, sprite.getLocation().y);
					
				}
				else{
					sprite.setIcon(imagensL[posicaoArray]);
					sprite.setLocation(sprite.getLocation().x-50, sprite.getLocation().y);
				}
			
				if (posicaoArray==3) {
					posicaoArray=1;
				}
				else
					posicaoArray++;
				
				try {
					Thread.sleep(500);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
				
			}
			
		}
	};
	
	threadAndar = new Thread(andar);
	threadAndar.start();

	setLayout(null);
	setSize(900,400);
	setVisible(true);
	setLocationRelativeTo(null);
	setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	
}

public static void main(String[] args) {
	new Sprite();

}

}
[/code]

Espero que ajude.

ok vou fazer funcionar e respondo… terei que criar as imagens e associa-las para ver o funcionamento. caso queira mandar as imagens, avise. mas como disse, pretendo faze-las, talvez para não incomodar tanto, mas se puder mandar, melhor.

OPS… baixei seu .rar e vi que as imagens estão ali… logo faço os coments… (editado)

em todo caso consegui animar as imagens, com o gif animado como queria, uso uma única imagem, mas ela já é um gif animado, funciona perfeitamente, basta ver o jar, que disponibilizei nesta página… já atualizado…

achei bons links para estudo…

seguem:

http://seumestredaweb.blogspot.com.br/2012/06/java-games-2d-tutorial-parte-6.html todas as partes são boas e bem básicas, aprofundando…

além deste curso completo e gratuito, que estou estudando aos poucos…
http://abrindoojogo.com.br/djj-index

além deste outro excelente tutorial…
http://zetcode.com/tutorials/javagamestutorial/collision/

bom proveito tb.

esetou vendo os 3 ao mesmo tempo, passo a passo…
logo sairá um jogo com sprites, etc e tal… por enquanto faço os meus com o IMAGEICON,
segue este no jar, e também no meu site …http://www.raghy.net23.net

link para meus projetos zipados…

http://www.4shared.com/zip/QDKCwuuj/ultimos.html

agradeço urban, agora ficou mais claro, mantemos contato…

farei as imagens , caso não possa mandar, ou ache demais, etc. (já achei… hehe!!)

lhe agradeço a classe, verei em funcionamento.

olhe meu site e os jogos que já fiz, mesmo sem sprites. see ya.

novamente o jar, com os gif animados em funcionamento como se fossem uma imagem estática, que de certa forma resolve bem o problema…
mesmo sendo uma solução externa ao java.

(EDITADO)
AAAh, vi a classe, interessante… vc também produz jogos, urban, pode mostrar algo??
vou tentar implementar um pulo ou coisa parecida…
tens scripts assim simples para colisão… bem já mostrei alguns links e irei estudar…

raghy espero que o material tenha sido útil.

Gosto da parte gráfica de Java, fiz alguns projetos de jogos para fins acadêmicos. Vou tentar reunir algo e colocar aqui. Como falei curto muito mexer com imagens e layout, porém como atualmente meu trabalho está mais voltado a área de telecomunicações e suporte técnico, o tempo é pouco para o desenvolvimento, sem contar na faculdade que consome um pouco.

Mas o que precisar é só falar, tentarei sempre contribuir com algo e também obter novos conhecimentos.

sim sempre acrescenta, até porque sou novato neste coisa de 2d, de fato só faço jogos com image icon…

segue link para download de jogos e projetos aplicativos

http://www.4shared.com/zip/QDKCwuuj/ultimos.html

qualquer hora ponho um jogo animado por aqui, viu o acima, tem gifs animados na animação que é uma excelente e prática solução. como uma imagem só, que já é animada por si só.