9
votes

JPanel ne répond pas à l'événement de Keylistener

J'ai une sous-classe de jframe qui utilise une classe étendue de jPanel xxx

i ajouter un objet de helloworld à la trame - app.add (helloworld); . Maintenant, lorsque j'appuie sur n'importe quelle clé de clavier, les méthodes Keylistener sont appelées et il semble que helloworld n'a pas la mise au point de la fenêtre. J'ai aussi essayé d'invoquer helloworld.requestfocusinwindow (); mais ne répond toujours pas.

Comment puis-je faire répondre à la touche Presse? >


1 commentaires

Regardez dans Bindings de clés . Peut ou peut ne pas résoudre le problème, mais une approche généralement meilleure pour la balançoire.


4 Réponses :


12
votes

jPanel n'est pas concentrée par défaut. C'est-à-dire qu'il ne peut pas répondre aux événements liés à la focalisation, ce qui signifie qu'il ne peut pas répondre aux keyevents.

Je suggérerais d'essayer de se configurer sur le volet vers vrai et essayer à nouveau. Assurez-vous de cliquer sur le panneau pour vous assurer qu'il reçoive la mise au point.

Comprendre cependant, vous obtiendrez des problèmes de traversée étranges, car le panneau recevra désormais la mise au point de saisie, car l'utilisateur navigue à travers vos formulaires, ce qui semble que l'accent a été perdu de l'endroit où.

aussi, Keylistener s tendance à ne pas être peu fiable dans ce type de situation (en raison de la manière dont le gestionnaire de focus fonctionne).


0 commentaires

19
votes

Avez-vous défini que keylistener code> pour votre panneau helloworld code> serait ce panneau lui-même? De plus, vous devez probablement définir ce panneau concentré. Je l'ai testé par ce code et il semble fonctionner comme il se doit

class HelloWorld extends JPanel implements KeyListener{
    public void keyTyped(KeyEvent e) {
        System.out.println("keyTyped: "+e);
    }
    public void keyPressed(KeyEvent e) {
        System.out.println("keyPressed: "+e);
    }
    public void keyReleased(KeyEvent e) {
        System.out.println("keyReleased: "+e);
    }
}

class MyFrame extends JFrame {
    public MyFrame() {
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setSize(200,200);

        HelloWorld helloWorld=new HelloWorld();

        helloWorld.addKeyListener(helloWorld);
        helloWorld.setFocusable(true);

        add(helloWorld);
        setVisible(true);
    }
    public static void main(String[] args) {
        new MyFrame();
    }
}


1 commentaires

n'oubliez pas de grabfocus () si vous avez des Mouselisteners personnalisés



1
votes

simple que vous devez ajouter xxx


0 commentaires

1
votes

Ajoutez ceci dans la méthode de MyFrame;

this.addKeyListener(helloWorld);


0 commentaires