KeyListener qui ne répond pas pour JFrame : une solution complète
Le manque de réponse de KeyListener dans Java JFrame peut être attribué à quelques problèmes potentiels causes. Même si vous avez initialisé avec succès l'écouteur dans le constructeur, le focus peut ne pas être dirigé vers le JFrame, ce qui gêne la réception des événements clés.
Implémentation d'un KeyEventDispatcher
Pour contourner ce problème lié au focus, une approche alternative consiste à ajouter un KeyEventDispatcher personnalisé au KeyboardFocusManager. Cette approche est particulièrement avantageuse si vous souhaitez enregistrer un écouteur pour plusieurs composants plutôt qu'individuellement pour chacun. Voici un exemple d'implémentation :
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); } }
Dans cet exemple modifié, une classe KeyDispatcher personnalisée, MyDispatcher, est implémentée. La méthode dispatchKeyEvent au sein de cette classe gère différents événements clés (appuyés, relâchés, tapés) et imprime les messages appropriés sur la console. En enregistrant ce répartiteur auprès de KeyboardFocusManager, vous vous assurez que tous les événements clés, quel que soit le composant ciblé, sont interceptés et traités. Cela remplace efficacement le besoin de plusieurs écouteurs sur des composants individuels.
Conclusion
En implémentant un KeyEventDispatcher, vous pouvez résoudre efficacement le problème d'un KeyListener qui ne répond pas dans un JFrame. Cette approche vous permet de gérer les événements clés quel que soit votre objectif, offrant ainsi une solution plus complète et plus flexible pour votre application événementielle.
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!