Forum Clubic

[Java] Ecouteur clavier

Je dois implementer un jeu. je vien de développer le jeu ne mode texte et j’aimerais désormais l’implementer en quelque chose de plus graphiqie. :oui:

Toutefois,je me trouve confronté à un problème assez gênant. Je n’arrive pas à mettre en place une fenêtre graphique composée de menus, etc, tout en conservant l’écouteur clavier.

A la compilation cela ne pose aucun problème mais dès que j’ajoute un JMenuBar sur ma JFrame le KeyListener ne fonctionne plus…

Après avoir essayer pas mal de choses, j’aimerais bien un petit coup de main :slight_smile: car disons que ça commence à me chauffer les oreilles :fou:

Voici la partie du code concerné:

[cpp]

import javax.swing.;
import java.awt.
;
import java.awt.event.*;

public class Plateau extends JFrame implements PlateauI,ActionListener,KeyListener{

private JButton quitter;
private JButton pause;
private JPanel fenetre;
private Component composant;
 
public Plateau(int tailleMatrice){	
	

	setTitle("Bomberman");
	setSize(new Dimension(800,600));
	setBackground(Color.white);
	
	setJMenuBar(creerMenu());
	
	getContentPane().add(creerFenetre(),BorderLayout.CENTER); //On ajoute les composants
			getContentPane().addKeyListener(this);
	setVisible(true);
	
	                addWindowListener(new WindowAdapter(){  
		public void windowClosing(WindowEvent e){  
			System.exit(0); 
        		} 
     	});
            
	
	//composant= creerFenetre();

	

	
}

public JMenuBar creerMenu(){
	
	
	JMenuBar menu = new JMenuBar(); //Creation de la barre de menu
   
	
	JButton pause = new JButton("Pause"); // Creation du bouton pour mettre le jeu en pause
	pause.addActionListener(this);
	
	quitter = new JButton("Quitter"); // Creation du bouton pour quitter le jeu
	quitter.addActionListener(this);
	menu.setLayout(new FlowLayout());  
	menu.add(pause);   //Ajout des elements sur le Layout
	menu.add(quitter);
	
	//fenetre.add(menu,BorderLayout.NORTH);  // Ajout du menu en haut
	//fenetre.add(dessin,BorderLayout.CENTER); // Ajout de la zone de dessin au centre
	return menu;

}
public Component creerFenetre(){
	
	fenetre = new JPanel();  //Creation de la fenetre principale

	return fenetre;

}

[/cpp]

Je dois sûrement pas placer mon écouteur clavier comme il le faudrait mais je ne vois pas comment faire autrement. :??:
Merci d’avance pour vos réponses

Moi je mettrais peut-être plutot l’ecouteur (ou controleur) sur la fenetre.

this.addKeyListener( this );

Je suis pas sûr, mais ca me semblerais plus correct.

++

J’avais déjà essayé… j’ai reessayé quand même mais toujours sans résultats :frowning: :fou:

mais juste comme ca un key listener pourquoi faire ? je veux dire quelle genre d’evenement attend tu sur ta fenetre?
Ca serait pas mieux sur une zone de texte par exemple?
ah oui toto019 getContentPane().add…(this);
et this.add…(this) c’est pas identique en swing!!!

Ben l’application en elle-même c’est un jeu, donc le key listener va me permettre de déplacer un bomberman …

Uppp… :’(

Toujours le même problème et toujours pas trouvé de solution…

Il me semble que getContentPane().add…( this ); est la forme correct pour JFrame, pour les autres c pas necessaire. certes.
Mais il me semble aussi this.add…( this ) a été introduit dans la version 1.5 de Java, fait appel à getContentPane().add…( … ) en apportant qques protections mineurs.

voilà, sinon, moi perso, je mets mes keylisteners sur mes fenetres, et basta. plus simple à mettre en oeuvre.

oki merci de ta réponse :slight_smile:

En fait, cela venait du focus qu’il fallait que je mette sur ma fenêtre ou je dessinais.

:d