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.