KeyListener qui ne répond pas pour JFrame : débloquer l'interactivité du clavier
Dans vos efforts pour implémenter un KeyListener pour votre JFrame, vous avez rencontré un problème déroutant où le KeyListener ne semblait pas répondre, bien qu'il ait été correctement enregistré.
L'énigme du focus
Votre soupçon initial selon lequel le focus n'était pas sur le JFrame est une idée fausse courante. Par défaut, le JFrame a le focus lorsqu'il devient visible. Cependant, cela vaut la peine de vérifier en appelant requestFocus() sur le JFrame.
Présentation du KeyEventDispatcher
Si le focus n'est pas le coupable, envisagez d'utiliser un KeyEventDispatcher. Ce mécanisme puissant vous permet de capturer les événements clés, quel que soit le composant qui a le focus.
Exemple de code
L'extrait de code suivant montre comment ajouter un KeyEventDispatcher à votre JFrame :
public class MyFrame extends JFrame { private class MyDispatcher implements KeyEventDispatcher { @Override public boolean dispatchKeyEvent(KeyEvent e) { if (e.getID() == KeyEvent.KEY_PRESSED) { System.out.println("tester"); } else if (e.getID() == KeyEvent.KEY_RELEASED) { System.out.println("2test2"); } else if (e.getID() == KeyEvent.KEY_TYPED) { System.out.println("3test3"); } return false; } } public MyFrame() { add(new JTextField()); System.out.println("test"); KeyboardFocusManager manager = KeyboardFocusManager.getCurrentKeyboardFocusManager(); manager.addKeyEventDispatcher(new MyDispatcher()); } public static void main(String[] args) { MyFrame f = new MyFrame(); f.pack(); f.setVisible(true); } }
Avec ce code amélioré, vous pouvez désormais capturer les événements clés et effectuer les actions souhaitées, résolvant ainsi efficacement le problème initial d'un KeyListener qui ne répond pas.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!