IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AWT/Swing Java Discussion :

Intercepter plusieurs touches du clavier en même temps


Sujet :

AWT/Swing Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 38
    Points : 29
    Points
    29
    Par défaut Intercepter plusieurs touches du clavier en même temps
    Bonjour, après une recherche assez longue sur le forum je me suis décider à faire ce poste car je n'ai pas pu trouver la réponse que je cherche, voici mon problème :

    Il est assez facile, en java avec KeyListener d'intercepter une touche sur stdin (le clavier) de la facon suivante :
    (dans une classe qui extends KeyListener)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    public void keyTyped(KeyEvent e){
                     char c = e.getKeyChar();
    	 	System.out.println("key typed = "+e.getKeyChar());
     
                   switch(c)
                  {
                         case '8' : //une action
                               break;
     
                         case '2' : // une autre action
                              break;
     
                          //etc etc etc
     
                  }
    }
    Ce code marche très bien quand on appuie sur une touche à la fois. Mais comment faire pour gérer l'utilisation de plusieurs touches en même temps ? Je voudrais faire un petit jeu à deux joueurs avec des touches distinctes mais avec ce code une action d'un joueur entrave celle de l'autre ( si on appuie sur deux touches en même temps c'est la dernières touche qui est prise en compte)



    Question Bonus :
    Est-ce qu'on utilise des classes internes pour la gestions d'évènements ? J'ai vu les classes internes en cours il y a peu de temps et j'ai essayer d'en utiliser une pour la gestion d'event aujourd'hui même mais je n'y arrivais pas ( une class Animal extends JComponent implements KeyListener , extends JComponent pour avoir le focus avec requestFocus(), mais malgrés tout le clavier ne réagissait pas )



    Voila, merci d'avance pour vos réponses

  2. #2
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Points : 5 943
    Points
    5 943
    Par défaut
    En utilisant les méthodes keyPressed() et keyReleased() de ton listener, tu peux savoir si une touche a été enfoncé et non relaché
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    public class MyKeyAdapter extends KeyAdapter {
     
        private boolean isAPressed = false;
        private boolean isBPressed = false;
        private int lastPressed = KeyEvent.VK_UNDEFINED;
     
        public void keyPressed(KeyEvent e) {
            switch(e.getKeyCode()) {
                case KeyEvent.VK_A : {
                    isAPressed = true;
                    lastPressed = KeyEvent.VK_A;
                    break;
                }
                case KeyEvent.VK_B : {
                     isBPressed = true;
                    lastPressed = KeyEvent.VK_B;
                    break;
                }
            }
            doAction();
        }
     
        public void keyReleased(KeyEvent e) {
            switch(e.getKeyCode()) {
                case KeyEvent.VK_A : {
                     isAPressed = false;
                    break;
                }
                 case KeyEvent.VK_B : {
                      isBPressed = false;
                     break;
                 }
            }
        }
     
        public void doAction() {
            if(isAPressed && isBPressed) {
                // do something
            } else if(isAPressed) {
                // do something
            } else if(isBPressed) {
                // do something
            } else {
                // do something
            }
        }
    }
    Remarque : si tu as beaucoup de touches à gérer, il serait peut-être plus intéressant d'utiliser une List plutôt que des booléens.

    Remarque 2 : il faut bien noter l'utilisation de la méthode getKeyCode() en lieu et place de getKeyChar(), cf
    Citation Envoyé par Javadoc
    The getKeyChar method always returns a valid Unicode character or CHAR_UNDEFINED. Character input is reported by KEY_TYPED events: KEY_PRESSED and KEY_RELEASED events are not necessarily associated with character input. Therefore, the result of the getKeyChar method is guaranteed to be meaningful only for KEY_TYPED events.
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 38
    Points : 29
    Points
    29
    Par défaut
    Ok, je pense avoir compris comment faire, par contre je crois avoir repéré une erreur dans ton code, tu as deux fois la même méthode keyPressed ; Je suppose que la seconde (vu le contenu) doit etre keyReleased.

    Bon je vais étudier ca et le mettre en oeuvre pour mon petit jeu, merci beaucoup pour la réponse très très rapide

  4. #4
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Points : 5 943
    Points
    5 943
    Par défaut
    Erreur de copier/coller, désolé. C'est corrigé .
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Simuler plusieur touches du clavier en meme temps !
    Par Chyokyka dans le forum Débuter
    Réponses: 3
    Dernier message: 10/04/2008, 17h10
  2. Réponses: 4
    Dernier message: 06/11/2007, 14h36
  3. Réponses: 7
    Dernier message: 05/06/2006, 13h44
  4. Tester l'état de plusieurs touches du clavier en même temps
    Par wikers dans le forum Composants VCL
    Réponses: 7
    Dernier message: 11/11/2004, 09h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo