Partage
  • Partager sur Facebook
  • Partager sur Twitter

KeyBinding

Sujet résolu
    24 mai 2009 à 15:43:57

    Bonjour,

    Est-ce que quelqu'un pourrais m'expliquer comment on utilise KeyBinding, j'ai lu le tutoriel de Java sur le site de Sun, mais je comprend pas trop, ceci est surtout dut à la barrière de la langue : le tutoriel en question

    Je comprend souvent mieux la source que l'anglais.

    Merci d'avance.

    ps: je connais bien KeyListenner, mais je dois utiliser KeyBinding
    • Partager sur Facebook
    • Partager sur Twitter
      24 mai 2009 à 16:17:53

      Tu dois d'abord lier une entrée à une chaine, puis lier la chaine à une action

      donc d'abord tu récupère la map des entrées et tu ajoute une association
      component.getInputMap().put(keyStroke, "blabla");
      


      et puis récupère la map des actions et tu associe ta chaine à une action
      component.getActionMap().put("blabla", action);
      



      pour créer un keyStroke tu utilise KeyStroke.getKeyStroke(...)

      keyStroke = KeyStroke.getKeyStroke('a');
      // le plus simple, avec un caractère (ici la touche A), qui réagit lorsque la touche est tapée (enfoncée puis relâchée)
      
      keyStroke = KeyStroke.getKeyStroke('A',java.awt.event.InputEvent.CTRL_DOWN_MASK |java.awt.event.InputEvent.SHIFT_DOWN_MASK );
      // ici on utilise des modificateurs (séparés par un |), dans notre cas, on doit appuyer sur ctrl + shift + A
      // ce keyStroke réagira lorsque la touche est tapée (enfoncée puis relâchée)
      
      // il existe plusieurs modificateurs, qui peuvent être combinés comme bon te semble
         /*
          *  java.awt.event.InputEvent.SHIFT_DOWN_MASK
          * java.awt.event.InputEvent.CTRL_DOWN_MASK
          * java.awt.event.InputEvent.META_DOWN_MASK
          * java.awt.event.InputEvent.ALT_DOWN_MASK
          * java.awt.event.InputEvent.ALT_GRAPH_DOWN_MASK 
          */
      
      // il existe aussi une méthode
      KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_ENTER, java.awt.event.InputEvent.CTRL_DOWN_MASK);
      // où le premier argument est une constante de la classe (java.awt.event.KeyEvent) :
         /*
          * java.awt.event.KeyEvent.VK_ENTER
          * java.awt.event.KeyEvent.VK_TAB
          * java.awt.event.KeyEvent.VK_SPACE 
          * ...
          */
      
      // si tu ne veux pas mettre de modificateurs, tu peux faire
      KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_ENTER,0);
      // ce keyStroke réagit lorsque la touche est enfoncée OU relachée, mais il en existe aussi une version qui permet d'obtenir un keyStroke qui ne réagit qu'à l'un des deux :
      
      
      KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_ENTER,0,true);
      // réagit lorsqu'on relâche ENTER
      
      KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_ENTER,0,false);
      
      // réagit lorsqu'on appuie sur ENTER
      


      Si tu ne connais pas l'interface Action, sache qu'elle étend de ActionListener, et que tu peux toujours faire
      Action action = new AbstractAction(){
         public void actionListener(ActionEvent e) {
            // ...
         }
      });
      
      • Partager sur Facebook
      • Partager sur Twitter
        24 mai 2009 à 16:26:59

        Ha je ne connaissais pas cette fameuse classe, intéressant... il faut dire que je ne comprends pas très bien l'Anglais non plus.
        • Partager sur Facebook
        • Partager sur Twitter
          24 mai 2009 à 17:22:37

          ok , j'ai l'impression d'avoir tout compris merci beaucoup. Je passe à la pratique.

          tu pourrais pas me dire, pourquoi
          e.getActionCommand() == "a" est false
          avec ça
          vtemp.put(KeyStroke.getKeyStroke('a'), "doSomething");
          • Partager sur Facebook
          • Partager sur Twitter
            24 mai 2009 à 17:40:18

            ben parce qu'on utilse equals() pour une chaine et pas ==
            • Partager sur Facebook
            • Partager sur Twitter
              24 mai 2009 à 18:39:18

              j'ai trouvé, en faisant un classe par action

              ps: ça marchait pas non plus avec equals()
              • Partager sur Facebook
              • Partager sur Twitter

              KeyBinding

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown