Pb de récupération d'évenement !

joduak Messages postés 194 Date d'inscription lundi 11 juillet 2005 Statut Membre Dernière intervention 13 avril 2007 - 12 avril 2006 à 17:58
bloofi Messages postés 388 Date d'inscription mercredi 1 octobre 2003 Statut Membre Dernière intervention 3 mai 2006 - 13 avril 2006 à 02:17
Bonjour,



Comme le sujet l'indique j'ai un énorme problème d'écoute clavier...:p

En fait j'ai construit une classe "EcouteClavier" qui définit ma
fenêtre avec les 3 méthodes KeyTyped, KeyPressed, keyReleased, et qui
fonctionne très bien tout seul quand je définis mon main de la façon
suivante :

static public void main(String argv[])

{

EcouteClavier app = new EcouteClavier();



app.setVisible(true);

}



Maintenant j'essaie d'insérer ce code dans un "gros programme" où mon main est long.

Je souhaiterai récupérer l'évènement de ma classe précédente "EcouteClavier" dans mon main pour traiter l'évènement.

Dans mon gros programme il y aurait ainsi:



class programme {

static public void main(String argv[])


{

//Toutes les initialisations de mon programme

....



//Objet d'écoute


EcouteClavier app = new EcouteClavier();


app.setVisible(true);



while(true) {



//Recupération de l'évenement e



if( e.getKeyChar() == 'p')


System.out.println("Je peux executer mes taches car
l' evenement a bien été récupéré !");

}


}

}



Voilà mon problème et je suis dessus depuis fort longtemps...donc je me permets de vous demander votre aide !

Si il y a une feinte, une technique, une astuce ou que tout simplement vous avez des idées, je suis tout ouï !!!

Bonne journée!



Jod

11 réponses

bloofi Messages postés 388 Date d'inscription mercredi 1 octobre 2003 Statut Membre Dernière intervention 3 mai 2006 2
12 avril 2006 à 18:49
Coucou,
tout ce qui se situe apres l'instruction "setVisible(true)" ne s'effectuera qu'apres que la fenetre (app) soit fermée (cette méthode est bloquante)

EcouteClavier est une frame ?
0
joduak Messages postés 194 Date d'inscription lundi 11 juillet 2005 Statut Membre Dernière intervention 13 avril 2007
12 avril 2006 à 19:47
Merci de me répondre bloofi !

Oui effectivement EcouteClavier est une Frame et est déclaré comme suit:

public class EcouteClavier extends JFrame implements KeyListener

Je suis à ton entière disposition !
:)
0
bloofi Messages postés 388 Date d'inscription mercredi 1 octobre 2003 Statut Membre Dernière intervention 3 mai 2006 2
12 avril 2006 à 19:51
dans ce cas la dans EcouteClavier :

public class EcouteClavier extends JFrame implements KeyListener {

public EcouteClavier(){
....
this.addKeyListener(this);
}

public void keyTyped(KeyEvent e){}//recuperation event
public void keyPressed(KeyEvent e){}//recuperation event
public void keyReleased(KeyEvent e){}//recuperation event

}
0
joduak Messages postés 194 Date d'inscription lundi 11 juillet 2005 Statut Membre Dernière intervention 13 avril 2007
12 avril 2006 à 19:58
oui j'ai exactement ça dans EcouteClavier.
Par contre dans le main comment je recupère la valeur de l'évènement alors?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
bloofi Messages postés 388 Date d'inscription mercredi 1 octobre 2003 Statut Membre Dernière intervention 3 mai 2006 2
12 avril 2006 à 20:34
ben tu peux pas ^^

si tu y tiens tu peux faire comme ca dans le main :

(en suposant que ta classe Main implements KeyListener )

EcouteClavier app = new EcouteClavier();
app.addKeyListener(this)

et donc dans ce cas les methode de keylistener doivent etre dans la classe Main et non dans la classe EcouteClavier
0
joduak Messages postés 194 Date d'inscription lundi 11 juillet 2005 Statut Membre Dernière intervention 13 avril 2007
12 avril 2006 à 20:59
Je ne pense pas avoir bien compris ce que tu me dis (désolé)
Est comme cela que ma classe programme doit etre faite d'après toi?

class programme implements KeyListener
{
static public void main(String argv[])
{
//Toutes les initialisations de mon programme
....

//Objet d'écoute
EcouteClavier app = new EcouteClavier();
app.addKeyListener(this)

while(true)
{

//Recupération de l'évenement e
if( e.getKeyChar() == 'p')
System.out.println("Je peux executer mes taches car l' evenement a bien été récupéré !");
}
}

public void keyTyped(KeyEvent e){}//recuperation event
public void keyPressed(KeyEvent e){}//recuperation event
public void keyReleased(KeyEvent e){}//recuperation event
}

et ma classe EcouteClavier ne contient qu'un constructeur qui créé une JFrame?

C'est un peu flou pour moi...
Désolé de te faire perdre du temps...je débute ! :S
0
bloofi Messages postés 388 Date d'inscription mercredi 1 octobre 2003 Statut Membre Dernière intervention 3 mai 2006 2
12 avril 2006 à 21:21
enleve ton while et met :

if( e.getKeyChar() == 'p')
System.out.println("Je peux executer mes taches car l' evenement a bien été récupéré !");

dans la methode keyTyped ou keyPressed
0
joduak Messages postés 194 Date d'inscription lundi 11 juillet 2005 Statut Membre Dernière intervention 13 avril 2007
12 avril 2006 à 21:45
ok mais par contre eclipse me dit à la ligne de app.addKeyListener(this);
"cannot use this in a static context"

J'imagine que c'est parce qu'il est déclaré dans le main et que le main est en static...

Le mettre au dessus des méthodes
public void keyTyped(KeyEvent e){}//recuperation event
public void keyPressed(KeyEvent e){}//recuperation event
public void keyReleased(KeyEvent e){}//recuperation event
me donne une erreur aussi.

Si t'as une idée...
0
bloofi Messages postés 388 Date d'inscription mercredi 1 octobre 2003 Statut Membre Dernière intervention 3 mai 2006 2
12 avril 2006 à 21:56
met tout le code qui est dans la methode main dans un constructeur :

public programme (){
//ici tout le code qu'il y a dans la methode main
}

et dans la methode main tu met juste :
new programme() ;
0
joduak Messages postés 194 Date d'inscription lundi 11 juillet 2005 Statut Membre Dernière intervention 13 avril 2007
13 avril 2006 à 02:13
Salut,

Voilà j'ai essayé de faire comme tu m'as dit...
J'ai tout mis dans :
public programme (){
//ici tout le code qu'il y a dans la methode main
}
qu'il s'agisse de ce que j'avais dans mon main ou dans mon constructeur de EcouteClavier.

J'ai mis après mon main les définitions de :
public void keyTyped(KeyEvent e){}//recuperation event
public void keyPressed(KeyEvent e){}//recuperation event
public void keyReleased(KeyEvent e){}//recuperation event

et dans mon main() j'ai mis :
programme action = new programme();
action.setVisible(true);

Et ça marche, j'ai ma fenêtre qui s'affiche comme dans mon test de EcouteClavier seul.

Par contre...quand je fais dans mon ' keyPressed()' :

if( e.getKeyChar() == 'p')
{
System.out.println("Je peux executer mes taches car l' evenement a bien été récupéré !");
//+ Suite de code utilisant les variables initialisées dans ma class programme
//...
}

si j'appuie sur 'p' j'ai bien mon message dans ma console, mais la suite du code ne marche pas puisque le compilateur ne connait aucune des variables !!

Comment faire pour que toutes mes variables soient connues?

Jod le débutant relou...
0
bloofi Messages postés 388 Date d'inscription mercredi 1 octobre 2003 Statut Membre Dernière intervention 3 mai 2006 2
13 avril 2006 à 02:17
declare toutes tes variables en variable de classe
0
Rejoignez-nous