Maison  >  Article  >  Java  >  Pourquoi le KeyListener de mon JFrame ne répond-il pas ?

Pourquoi le KeyListener de mon JFrame ne répond-il pas ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-13 13:25:02506parcourir

Why Isn't My JFrame's KeyListener Responding?

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!

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