Les KeyListeners ne répondent pas dans JPanel : un problème courant
Lors de l'utilisation de KeyListeners pour détecter les frappes au clavier dans un JPanel, les développeurs rencontrent souvent le problème où le les auditeurs ne parviennent pas à déclencher les actions souhaitées. Ce problème peut provenir de plusieurs facteurs.
Contraintes des composants ciblés
Les KeyListeners comptent sur leur attachement au composant ciblé pour fonctionner correctement. Par défaut, le focus n'est pas automatiquement accordé à un JPanel. Pour résoudre ce problème, définissez explicitement la focalisation et demandez le focus dans le constructeur de JPanel :
<code class="java">public JPanel extends JPanel implements KeyListener { public JPanel() { this.addKeyListener(this); this.setFocusable(true); this.requestFocusInWindow(); }</code>
Alternative : liaisons de touches
Alors que définir le focus manuellement est un solution viable, une approche plus robuste consiste à utiliser les liaisons de clés. Les liaisons de touches fournissent un mécanisme flexible pour associer des frappes à des actions spécifiques. Pour implémenter les raccourcis clavier dans un JPanel :
<code class="java">public JPanel extends JPanel implements ActionListener { public JPanel() { setupKeyBinding(); this.setFocusable(true); this.requestFocusInWindow(); } private void setupKeyBinding() { int condition = JComponent.WHEN_IN_FOCUSED_WINDOW; InputMap inMap = getInputMap(condition); ActionMap actMap = getActionMap(); inMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_LEFT, 0), "Left"); actMap.put("Left", new leftAction()); } private class leftAction extends AbstractAction { public void actionPerformed(ActionEvent e) { System.out.println("test"); } } }</code>
Dans cet exemple, la classe leftAction définit l'action à effectuer lorsque la touche fléchée gauche est enfoncée (dans ce cas, imprimer "test" sur la console) .
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!