Problème avec un KeyListener

Problème avec un KeyListener - Java - Programmation

Marsh Posté le 03-05-2003 à 18:13:11    

Je suis sur une petite application avec un perso que si déplace au clavier.
Mon problème ce situe au inveau du addKeyListener, en effet je peut taper au clavier une seule fois sur 's' (ou ça marche très bien) ensuite plus rien...
 
Voici le code (incomplet) :
 
public class Fenetre extends JFrame implements KeyListener{
 
        public Fenetre() {
                super("Projet prog, première version" );
                this.setLocation(50,50);
                this.setSize(800, 600);
                this.getContentPane().setLayout(null);
                this.gestion();
                // keyText est un JTextField
                keyText.addKeyListener(this);    
        }
         
        private void gestion() {
                //xPos et yPos> position du perso
                this.graphisme(xPos, yPos);
                keyText.addKeyListener(this);  
        }
         
        private void graphisme(int x, int y) {
                 
                this.getContentPane().setLayout(null);
                this.addPerso(x, y);
                this.addClavier();
                //addPlateau et addFond ajoute 2 images en fond
                this.addPlateau(200);
                this.addFond();    
        }
         
        private void addClavier() {
                keyText.setBounds(200,400,0,0);
                this.getContentPane().add(keyText);
        }
 
        private void addPerso(int x, int y) {
                 
                perso.setBounds(x, y, 50, 50);
                this.getContentPane().add(perso);
                 
        }
         
        public void keyTyped(KeyEvent input) {
                 
                char key = input.getKeyChar();
                System.out.println(key);
                if (key == 's';) {
                        yPos = yPos + 20;
                        System.out.println(yPos);
                        this.gestion();
                }
                 
        }
 
avec ce code le perso se déplace mais la posution augmente de 20 puis 40 lors du 2ième appuis sur 's' puis 80 etc...
 
En fait le addKeyListener je sais pas trop comment le mettre, si j'en mais un seul je ne peut appuyer qu'une seule fois sur 's' ...
 
Merci de m'éclairer

Reply

Marsh Posté le 03-05-2003 à 18:13:11   

Reply

Marsh Posté le 03-05-2003 à 22:05:32    

bon deja, c'est clair, la methode addKeyListener, tu l'appelle qu'une seule fois et dans le constructeur ! sinon ca va pas aller. Si tu appelle n fois addKeyListener en passant ta Fenetre en parametre, des qu'il y a un KeyEvent, la methode keyPressed sera appelee n fois aussi.
 
Avant de repondre a tes questions, je voudrais savoir comment tu gere ton objet keyText. Il apparait partout, mais il n'est pas declare dans ta classe Fenetre. c'est pas normal ca :??:

Reply

Marsh Posté le 04-05-2003 à 12:11:47    

mon KeyText je l'ai déclaré mais je l'ai pas mis dans le message pour faire plus court. Tu rajoutes ça:  
 
private JTextField keyText = new JTextField(80);
 
Je sais pas si c'est très réglementaire mais j'arrive pas à faire marcher le clavier avec autre chose qu'en mettant un JTextField...
 
Donc le addKeyListener(this) je le mets ou alors? ce que je comprends pas c'est que ça marche pas seulement si j'appuie sur 's', avec le reste du clavier ça marche très bien, je peut appuyer autant de fois que je veux.

Reply

Marsh Posté le 04-05-2003 à 13:30:26    

ben oui, mais le problemen, c'est que quand ton JTextfield n'a pas le focus, il ecoute pas le clavier et ne lance pas d'evenement...
 
il faut donc que ce soit ta Fenetre qui ecoute le clavier

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed