[JAVA] Probleme de KeyListener

Ogtraba -  
 mohamed -
bonjour,
Je programme sur eclipse.
voila j'ai ecrit le code qui suit pour rafraichir ma fenetre :

KeyListener Refresh = new KeyListener(){

public void keyPressed(KeyEvent e){
System.out.println(e.getKeyCode() );
if (e.getKeyCode() == KeyEvent.VK_F5){
PanelPrincipal.revalidate();
}
}
...
}//keyListener

PanelPrincipal.addKeyListener(Refresh);

Or il ne ce passe rien. comme vous pouvez le voir j'ai mit un System.out.println(); pour voir s'il se passé qqch. Et quelque soit le bouton du clavier que je tape il ne s'affiche rien.
Configuration: Windows XP
Internet Explorer 6.0

10 réponses

  1. Utilisateur anonyme
     
    Salut!

    Pour fiddy: pourquoi placer le KeyListener sur la JFrame lorsqu l'on a juste besoin de celui-ci sur le panel?

    Pour Ogtraba: pour qu'un KeyListener soit actif sur un JPanel, tu dois rendre ton JPanel "focusable" puis lui donner le focus.

    Exemple:

    JPanel panel = new JPanel();
    panel.stFocusable(true);
    panel.requestFocus();
    //A partir de maintenant, ton JPanel peut gérer les KeyEvent via le KeyListener
    


    ;-)
    HackTrack
    19
  2. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    Si tu refais un new des JComboBox, il ne devrait plus y avoir de problèmes
    3
  3. kij_82 Messages postés 4102 Date d'inscription   Statut Contributeur Dernière intervention   857
     
    Tu as essayé de faire avec une autre touche ?
    Par example une touche qui ne soit pas "spécial", le 'a' par exemple.
    Car il se peut que F5 soit déjà réservé pour un comportement par défaut pour une fenêtre... (je n'y crois pas trop mais on ne sais jamais)

    EDIT : remarque idiote en faite puisque même si c'est le cas le sysout devrait s'effectuer.

    Et si tu fais :

    PanelPrincipal.addKeyListener(
    new KeyListener(){
    
    public void keyPressed(KeyEvent e){
    System.out.println(e.getKeyCode() );
    if (e.getKeyCode() == KeyEvent.VK_F5){
    PanelPrincipal.revalidate();
    }
    }
    ...
    }//keyListener 
    
    );
    
    


    Il se passe toujours rien ?

    2
  4. Ogtraba
     
    desolé pour le temps de reponse mais je n'est pas put essayer ta reponse avant ce matin.

    helas cela n'a rien changer a mon probleme. Il semblerai que mon programme ne detecte pas les touches de mon clavier. j'ai essayer de recopier le code ds KeyRelease et KeyTyped mais ça ne change rein. est il possible que ce ne soit pas au bon endroi dans mon programme?
    1
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. kij_82 Messages postés 4102 Date d'inscription   Statut Contributeur Dernière intervention   857
     
    Il n'est peut etre tout simplement pas possible d'attribuer un écouteur sur un panel non ?

    Sur un bouton, un label, un text, une fenetre.. ok, mais sur un panel je ne suis pas sur que l'on puisse.
    Cela vient peut etre de là ?
    (je n'ai jamais eu l'utilité de mettre un écouteur d'évênement sur un panel)

    1
  7. ogtraba
     
    c'est impecable,

    ça marche part contre pour réinnitialiser mes composants qui sont des JComboxbox je suis obliger de tuer le programme par dispose et de recréé une nouvelle fenetre.

    Il n'existe pas une autre methode??
    1
  8. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    Fais plutot le KeyListener sur ta JFrame

    public class Fenetre extends JFrame implements KeyListener {

    ...

    public void keyTyped(KeyEvent e) {
    panelPrincipal.repaint();
    }

    //implémente toutes les méthodes de l'interface KeyListener ou tu peux utiliser un canevas comme tu as fait.
    0
  9. ogtraba
     
    merci,
    je comprend mieux, pour quoi aucune des touches du clavier fonctionner. je vais essayer.
    0
  10. ogtraba
     
    heu... question bete comment on fait pour metre la balise resolu??
    0
    1. kij_82 Messages postés 4102 Date d'inscription   Statut Contributeur Dernière intervention   857
       
      Regarde au début de la discution tu as une checkbox a cocher pour résolu et non résolu
      0
    2. Ogtraba
       
      bon je doit être aveugle,

      je suis remonter jusqu'en haut de la page ou le nom de la discution apparet. Les seules checkbox qu'il y a sont celles de la barre de recherche.
      A moins que ça vienne du fait qu'il y a des erreurs sur la page??
      0
    3. mohamed
       
      essayer ce code ca marche bien pour mois :

      public void tabparentre()
      {
      Set forwardKeys = getFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS);
      Set newForwardKeys = new HashSet(forwardKeys);
      newForwardKeys.add(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0));
      setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS,
      newForwardKeys);
      }
      }
      0