Mam dwa obrazki sterowca (różnią się ułożeniem śmigła), chciałbym aby zminieniały się tak aby utworzyła się animacja. Nie za bardzo mam pomysł jak to zrobić, ale czytałem, że na timerach się da. Póki co kod wygląda tak. Z góry dziękuję za pomoc.

 import java.awt.*;
import java.awt.Image;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.image.BufferStrategy;
import java.util.Timer;
import java.util.TimerTask;
import javax.swing.ImageIcon;
import javax.swing.JFrame;

public class Sterowanie extends JFrame{
    
    private Image       tlo1, tlo2, tlo;
    private Image       sterowiec, sterowiec1, sterowiec2, balon, model;
    private boolean     klawisze[];
    private int         wsp[];
    private Timer       zegar, anim;

    class Zadanie extends TimerTask{

        public void run()
        {
            if(klawisze[0])
                wsp[1]-=1;
            if(klawisze[1])
                wsp[1]+=1;
            if(klawisze[2])
                wsp[0]-=1;
            if(klawisze[3])
                wsp[0]+=1;
            if(klawisze[4]){
                wsp[1]-=1;
                wsp[0]-=1;}
            if(klawisze[5]){
                wsp[1]-=1;
                wsp[0]+=1;}
            if(klawisze[6]){
                wsp[1]+=1;
                wsp[0]-=1;}
            if(klawisze[7]){
                wsp[1]+=1;
                wsp[0]+=1;}
            if(klawisze[8])
                tlo=tlo1;
            if(klawisze[9])
                tlo=tlo2;
            if(klawisze[10])
                model=sterowiec1;
            if(klawisze[11])
                model=balon;
               
           wsp[0] = (wsp[0]<0)?0:wsp[0];
           wsp[0] = (wsp[0]>720)?720:wsp[0];
           wsp[1] = (wsp[1]<20)?20:wsp[1];
           wsp[1] = (wsp[1]>540)?540:wsp[1];
            repaint();
        }
  }
    
    Sterowanie(){
        super("Grafika 2D - sterowanie");
        setBounds(50,50,800,600);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setResizable(false);
        setVisible(true);
        createBufferStrategy(2);

        klawisze        = new boolean[16];
        wsp             = new int[8];
        tlo1            = new ImageIcon("obrazki/tlo1.jpg").getImage();
        tlo2            = new ImageIcon("obrazki/tlo2.jpg").getImage();
        balon       = new ImageIcon("obrazki/balon.png").getImage();
        sterowiec1       = new ImageIcon("obrazki/sterowiec.png").getImage();
        sterowiec2       = new ImageIcon("obrazki/sterowiec2.png").getImage();

        wsp[0] = 20;
        wsp[1] = 40;

        zegar = new Timer();
        zegar.scheduleAtFixedRate(new Zadanie(),0,10);
             
        this.addKeyListener(new KeyListener(){

            public void keyPressed(KeyEvent e){
                switch(e.getKeyCode()){
                    case KeyEvent.VK_UP:      klawisze[0] = true; break;
                    case KeyEvent.VK_DOWN:    klawisze[1] = true; break;
                    case KeyEvent.VK_LEFT:    klawisze[2] = true; break;
                    case KeyEvent.VK_RIGHT:   klawisze[3] = true; break;
                    case KeyEvent.VK_Q:   klawisze[4] = true; break;
                    case KeyEvent.VK_W:   klawisze[5] = true; break;
                    case KeyEvent.VK_A:   klawisze[6] = true; break;
                    case KeyEvent.VK_S:   klawisze[7] = true; break;
                    case KeyEvent.VK_T:   klawisze[8] = true; break;
                    case KeyEvent.VK_Y:   klawisze[9] = true; break;
                    case KeyEvent.VK_B:   klawisze[10] = true; break;
                    case KeyEvent.VK_N:   klawisze[11] = true; break;

                }
            }
            public void keyReleased(KeyEvent e){
                switch(e.getKeyCode()){
                    case KeyEvent.VK_UP:      klawisze[0] = false; break;
                    case KeyEvent.VK_DOWN:    klawisze[1] = false; break;
                    case KeyEvent.VK_LEFT:    klawisze[2] = false; break;
                    case KeyEvent.VK_RIGHT:   klawisze[3] = false; break;
                    case KeyEvent.VK_Q:   klawisze[4] = false; break;
                    case KeyEvent.VK_W:   klawisze[5] = false; break;
                    case KeyEvent.VK_A:   klawisze[6] = false; break;
                    case KeyEvent.VK_S:   klawisze[7] = false; break;
                    case KeyEvent.VK_T:   klawisze[8] = false; break;
                    case KeyEvent.VK_Y:   klawisze[9] = false; break;
                    case KeyEvent.VK_B:   klawisze[10] = false; break;
                    case KeyEvent.VK_N:   klawisze[11] = false; break;
                    
                }
            }
            public void keyTyped(KeyEvent e){
            }
        }
    );
  }
    
    public static void main(String[] args)
    {
        Sterowanie okno = new Sterowanie();
        okno.repaint();
       
    }
    
    public void paint(Graphics g)
    {
      
        BufferStrategy bstrategy = this.getBufferStrategy();
        Graphics2D g2d = (Graphics2D)bstrategy.getDrawGraphics();
        g2d.drawImage(tlo, 0,0,null);                    
        g2d.drawImage(model,wsp[0],wsp[1],null);        
        g2d.setColor(Color.DARK_GRAY);
        g2d.setFont(new Font("Arial",Font.BOLD,20));
        g2d.drawString("Wsp x: " + wsp[0], 5, 55);       
        g2d.drawString("Wsp y: "+ wsp[1], 5, 100);
        g2d.dispose();
        bstrategy.show();
        
    }
}