2012-11-02 14 views
5

Ich arbeite an einer Anwendung, die ein JPanel benötigt, um auf die Escape-Taste zu reagieren, die gedrückt wird. Ich bin mir ziemlich sicher, dass ich die richtige Methode zur Registrierung von Tastaturbelegungen an einer Komponente verwendet habe, aber ich mache immer noch etwas falsch. Dies ist der Code für die Eintragung von Ende an dem Keybinding reagieren:JPanel reagiert nicht auf KeyBindings

private void initializeKeyBindings() { 
    Action a = new AbstractAction() { 
     private static final long serialVersionUID = 1L; 
     @Override public void actionPerformed(ActionEvent e) { 
      menu.setVisible(true); 
      System.out.println("Herp"); 
     } 
    }; 
    this.getInputMap().put(KeyStroke.getKeyStroke("ESCAPE"), "ESCAPE"); 
    this.getActionMap().put("ESCAPE", a); 
} 

Diese Methode im Konstruktor meines JPanel aufgerufen wird, nachdem alle andere Komponenten initialisiert werden. Ich habe versucht, es zu debuggen und ich fand, dass die Handlung selbst im JPanel registriert wird, aber der Code in der Methode actionPerformed() nie erreicht wird. Ich vermute, dass es ein Problem mit diesem JPanel geben könnte, das keinen Fokus hat, da ich ein CardLayout im darüber liegenden JFrame verwende. Ich hoffe aufrichtig, dass mir jemand dabei helfen kann, da es meinen Fortschritt sehr stark hält.

Antwort