Executar paintComponent ao apertar uma tecla

0 respostas
BrRodrigues

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
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
			
		}
		
	}

}
Classe Tiro
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;
    }

}

Att.

Criado 20 de setembro de 2010
Respostas 0
Participantes 1