Estou criando um jogo simples pelo java,uma cópia do supermariobros 3 para eu testar meu conhecimento em java,eu usei uma ImageIcon para fazer a tela inicial,que é um gif da tela inicial do supermariobros3,se eu apertar z,quero que a tela mude para outra,até ai tudo bem,eu consegui,mas se eu apertar z na outra tela,mesmo que não apareça,uma tela duplicada aparece,pois é uma imageicon e não um JPanel,então as coisas são básicas.Mas quero que o z só funcione uma vez,quando clicado quero que não faça nenhum comando depois,os métodos do keyListener serão úteis para isso?
O que é essa outra tela? É outro JFrame? Ou você só está trocando a imagem/gif?
O jeito mais simples é ter uma variável booleana na sua classe e, quando z for pressionado, vocẽ verifica essa variável antes de executar o comando, e altera o valor da variável pra não executar uma segunda vez. Algo como:
classe ClasseQualquer{
private boolean jaExecutouAntes = false;
public void keyListenerqualquer(){
if (teclaPressionada.equals("z")){
if (!jaExecutouAntes){
trocartela();// método que troca a tela
jaExecutouAntes = true; // da próxima vez, a variável estará true e não trocará a tela
}
}
}
Obviamente, o código acima não funciona; é só pra exemplificar a ideia.
PS: não faz parte da pergunta mas, se você quer criar um jogo interativo, funcional e com animações em tempo real, terá muita dificuldade de obter isso usando componentes visuais como ImageIcon. Jogos usam técnicas diferentes da programação de interfaces convencional (Swing, AWT).
Abraço.