Méthode getKeyCode qui n'est pas prise en compte

Résolu/Fermé
Padenom - 8 mai 2014 à 11:41
 Padenom - 6 juil. 2014 à 14:23
Bonjour.
Je débute en java et mon projet actuel est de réaliser un petit casse-briques pour apprendre la programmation événementielle. Actuellement, je bloque sur l'interface clavier.
Je souhaite qu'une variable int correspondant à la position horizontale de la raquette varie lorsque le joueur appuie sur les touches fléchées gauche et droite. J'ai donc choisi d'utiliser l'interface KeyListener. Dans la méthode KeyPressed(), je fais un test pour savoir quelle touche a été appuyée... Et c'est là que ça coince.
La fenêtre ne tient pas compte de l'interface KeyListener. J'ai fait des tests et il semble que la fenêtre lise une première fois la position de la raquette et ne la remette plus à jour ensuite. Mais je ne sais pas d'où vient le problème, d'autant que mon code compile.
Pourriez-vous m'expliquer ce qui ne va pas dans mon code? Merci d'avance!

----------------------------------------------------------------------------------------------------------------------------------
Mon code:

import javax.swing.JLabel;
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

class Raquette implements KeyListener{			//classe "raquette"
	public int pos = 200;						//position sur x de la raquette
	public boolean gauche = false;
	public boolean droite = false;
	public void keyPressed(KeyEvent e){	
		if(e.getKeyCode() == 37){
			gauche = true;
			droite = false;
		}else if(e.getKeyCode() == 39){
			droite = true;
			gauche = false;
		}else{
			gauche = false;
			droite = false;
		}
	}
	public void keyTyped(KeyEvent e){}			//méthode inutilisée
	public void keyReleased(KeyEvent e){
		gauche = false;
		droite = false;
	}
}

class Pan extends JPanel{
	Raquette raq = new Raquette();	//instanciation de la raquette
}

class Fenetre extends JFrame{
	Pan pan = new Pan();
	JLabel label = new JLabel("position=" + pan.raq.pos);	//affichage à des fins de test
	Fenetre(){
		this.setTitle("Casse-briques");
		this.setSize(400,400);
		this.setLocationRelativeTo(null);
		this.setVisible(true);
		pan.add(label);
		this.setContentPane(pan);
		deplacement();
	}
	private void deplacement(){		//méthode en boucle infinie
			while(true){
				if(pan.raq.gauche == true){
					pan.raq.pos--;
					sleep(1000);
				}else if(pan.raq.droite == true){
					pan.raq.pos++;
					sleep(1000);
				}else{
					sleep(1000);
				}
			label.setText("nouvelle position=" + pan.raq.pos);
			}
	}
}


void main(){
	Fenetre fen = new Fenetre();
}
A voir également:

2 réponses

KX Messages postés 16754 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 020
8 mai 2014 à 11:51
Bonjour,

Ceci n'est pas suffisant :

class Pan extends JPanel{
	Raquette raq = new Raquette();	//instanciation de la raquette
}

Tu devrais au minimum avoir un

public Pan() {
    addKeyListener(raq);
}
0
Merci beaucoup, j'ai fait quelques modifications et désormais le code fonctionne comme prévu.
Merci pour la rapidité de votre réponse!
0