[JAVA] Probleme de KeyListener
Ogtraba
-
mohamed -
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.
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
-
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 -
Si tu refais un new des JComboBox, il ne devrait plus y avoir de problèmes
-
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 ?
-
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? -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
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)
-
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?? -
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. -
merci,
je comprend mieux, pour quoi aucune des touches du clavier fonctionner. je vais essayer. -
-
-
-
-
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);
}
}
-