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
Libérer: 2024-11-13 03:17:02
original
1093 Les gens l'ont consulté

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);
    }
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal