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 :

[KeyEvent] plusieurs touches simultanées enfoncées [FAQ]


Sujet :

AWT/Swing Java

  1. #1
    Membre à l'essai
    Inscrit en
    Novembre 2003
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 10
    Points : 10
    Points
    10
    Par défaut [KeyEvent] plusieurs touches simultanées enfoncées
    j'ai donc ma voiture sur plan 2d vu de dessus
    j'appuie sur up -> ca avance
    down -> ca recule
    right -> ca tourne la voiture sur elle meme vers la droite
    left-> ca tourne la voiture sur elle meme vers la gauche

    tout se passe bien seulement le probleme reste lorsque ke j'appuie sur UP + Right ->impossible de conjuguer les 2 mouvement . c'est soit l'un soit l'autre...
    j'ai essayé de mettre genre dans

    public synchronized void keyPressed(KeyEvent e)

    la condition suivante :

    else if( (e.getKeyCode() == KeyEvent.VK_UP)&&(e.getKeyCode() == KeyEvent.VK_RIGHT))
    {
    compostion de la translation et de la rotation
    }

    mais ca ne marche pas..
    en fait l'ecouteur ecoute la derniere touche enfoncée et zape totalement les autres touches enfoncées. Comment faire???
    Est ce que quelqu'un a une idee...?

  2. #2
    Membre confirmé

    Homme Profil pro
    Indépendant
    Inscrit en
    Juin 2002
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Indépendant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2002
    Messages : 540
    Points : 607
    Points
    607
    Par défaut
    Je crains que tu ne puisses le faire que dans le cas d'un JMenuItem par la fonction setAccelarator().

    Cependant il est écrit ceci :

    Note that when the keyboard accelerator is typed, it will work whether or not the menu is currently displayed.
    Fondateur Alien6 : Prescriptive Analytics & Machine Learning Software

  3. #3
    Membre confirmé
    Avatar de Glob
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Avril 2002
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Avril 2002
    Messages : 428
    Points : 630
    Points
    630
    Par défaut
    Lut,

    Un p'tit coup de main...


    keypressed:
    up -> vitesse d'avance = 10 m/s (par exemple)
    gauche -> vitesse de rotation = 90°/s (par exemple, tu peux aussi le faire en rad/s)
    même principe pour bas, droite

    keyreleased:
    up -> vitesse d'avance = 0 m/s
    gauche -> vitesse de rotation = 0°/s
    même principe pour bas, droite


    Non?
    Glob
    What would you do if you were not afraid?

    Cours et tutoriels pour apprendre Java , FAQ Java, et Forum Java

  4. #4
    Membre éclairé
    Avatar de Kangourou
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    579
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 579
    Points : 859
    Points
    859
    Par défaut
    Salut,

    gege2mars, ca marche pas pour une bonne raison : quand on appuie sur deux touches, le programmes cree deux evenements qui vont etre traites l'un apres l'autre. Donc dans la fonction test, tu n'as qu'une seule source.

    Une solution possible (je ne dis pas que c'est la meilleure) peut etre de creer un tableau de booleens pour chaque touche, et a changer l'etat du boolean correspondant dans la fonction keyPressed().

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    boolean keyUp=false, keyDown=false, keyLeft=false, keyRight=false; 
     
    public synchronized void keyPressed(KeyEvent evt){
    if(evt.getKeyCode()==KeyEvent.VK_UP) keyUp = true;
    // ...
    }
     
    public synchronized void keyReleased(KeyEvent evt){
    if(evt.getKeyCode()==KeyEvent.VK_UP) keyUp = false;
    // ...
    }
    Ensuite, lorsque tu veux redessiner ta voiture (dans un thread, par exemple), tu lis les touches enfoncees, et tu recalcules la nouvelles position en focntion.

    A+

  5. #5
    Membre à l'essai
    Inscrit en
    Mai 2002
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 13
    Points : 13
    Points
    13
    Par défaut
    En accord avec Kangourou,

    tu peux faire quelque chose du genre :
    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
     
    boolean keyUp=false, keyDown=false, keyLeft=false, keyRight=false; 
     
    public synchronized void keyPressed(KeyEvent evt)
    { 
    if(evt.getKeyCode() == KeyEvent.VK_UP) keyUp = true; 
    // ... 
    nextPos();
    } 
     
    public synchronized void keyReleased(KeyEvent evt)
    { 
    if(evt.getKeyCode() == KeyEvent.VK_UP) keyUp = false; 
    // ... 
    nextPos();
    } 
     
    private void nextPos()
    {
       if(keyUp){
          if(keyLeft){
             //...
          }else if(keyRight){
             //...
          } 
       }else if (keyDown){
          //.............
       }
       repaint();
    }
    a+

    coco
    Tous les goûts sont dans MA nature... tant qu'on me paye ! (Moi)

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

Discussions similaires

  1. Test de plusieurs touches simultanées
    Par Klyre dans le forum LabVIEW
    Réponses: 5
    Dernier message: 18/06/2015, 14h15
  2. Maintenir la touche Ctrl enfoncée,pour selectionner plusieurs options
    Par sajodia dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 25/11/2010, 10h42
  3. 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
  4. Réponses: 6
    Dernier message: 15/04/2004, 11h04
  5. Shortcut avec plusieurs touches
    Par scorpiwolf dans le forum C++Builder
    Réponses: 4
    Dernier message: 06/07/2002, 15h57

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