Executar paintComponent ao apertar uma tecla

Minha situaçao é a seguinte: quero criar um jogo estilo invasores do espaço, para isso criei uma nave que pode ativar nos “invasores”, o comando para atirar seria ESPAÇO, que deveria desenhar o tiro executando o paintComponent, mas isso nao acontece e se eu tentar executar o paintComponent fora do teste po ESPAÇO ele funciona normalmente.
Segue o codigo:

Classe Janela

[code]import java.awt.event.*;

import javax.swing.*;

public class Janela {
private JFrame frame;
private boolean tiro;
public void comece (){
frame = new JFrame(“Tiro”);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(500,500);
frame.setVisible(true);
frame.addKeyListener(new DarTiro ());
atirar(); // Quando atirar() é chamado por aqui FUNCIONA

}

public void atirar (){
	//inicio Tiro
	Tiro t = new Tiro();
	frame.getContentPane().add(t);
	for (int i =1; i <105; i++){
		t.repaint();
		t.movimentoTiro();
		try{
			Thread.sleep(10);
		}catch (Exception ex){} //fim try catch
	}//fim for
} //fim metodo atirar

class DarTiro implements KeyListener {

	@Override
	public void keyPressed(KeyEvent key) {
		// TODO Auto-generated method stub
		if (key.getKeyCode() == key.VK_SPACE){
			atirar(); //Quando atirar() é chamado por aqui NAO FUNCIONA
			System.out.println("espaço");
		}

		
	}

	@Override
	public void keyReleased(KeyEvent arg0) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void keyTyped(KeyEvent arg0) {
		// TODO Auto-generated method stub
		
	}
	
}

}
[/code]

Classe Tiro

[code]import javax.swing.;
import java.awt.
;

public class Tiro extends JPanel{

private int x= 250, y = 500;

public void paintComponent(Graphics g){
    g.setColor(Color.white);
    g.fillRect(0, 0, 500, 500);
    g.setColor(Color.red);
    g.drawLine(x, y, x, y-15);
}

public void movimentoTiro(){
    System.out.println("movimento");
    y = y - 5;
}

}
[/code]

Att.