Maison >Java >javaDidacticiel >Pourquoi le KeyListener de mon JFrame ne répond-il pas aux pressions sur les touches ?

Pourquoi le KeyListener de mon JFrame ne répond-il pas aux pressions sur les touches ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-13 03:17:021059parcourir

Why is my JFrame's KeyListener not responding to key presses?

KeyListener qui ne répond pas pour JFrame : un mystère résolu

Lors d'une tentative d'implémentation d'un KeyListener pour un JFrame, un développeur a rencontré un problème déroutant : le KeyListener semblait ne pas répondre , sans qu'aucun message n'apparaisse dans la console lorsque les touches sont enfoncées. Soupçonnant un manque de concentration sur JFrame, le développeur a demandé de l'aide.

Après un examen attentif, il a été découvert que le KeyListener était effectivement ajouté correctement et que la focalisation était correctement définie. Il manquait cependant un élément crucial : un mécanisme pour propager les événements clés au KeyListener.

La solution réside dans l'utilisation d'un KeyEventDispatcher. Ce répartiteur peut être défini comme une classe interne dans le JFrame et ajouté au KeyboardFocusManager. La méthode dispatchKeyEvent du répartiteur gère tous les événements clés, notamment keyPressed, keyReleased et keyTyped. En implémentant ce mécanisme, le KeyListener peut capturer et répondre efficacement aux événements clés.

Vous trouverez ci-dessous un exemple de code modifié qui intègre le KeyEventDispatcher :

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 cette modification, le KeyListener va désormais recevoir et traiter avec succès les événements clés, en fournissant le résultat attendu dans 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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn