2012-11-02 8 views
5

Sto lavorando a un'applicazione che richiede un JPanel per reagire alla chiave di escape che viene premuta. Sono abbastanza sicuro di aver usato il metodo giusto per registrare le combinazioni di tasti in un componente, ma chiaramente sto ancora facendo qualcosa di sbagliato. Questo è il codice responsabile della registrazione fine reagire alla suddetta combinazione di tasti:JPanel non reagisce a 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); 
} 

Questo metodo viene chiamato nel costruttore dei miei JPanel dopo tutti gli altri componenti vengono inizializzati. Ho provato a debuggarlo e ho scoperto che l'azione stessa è registrata in JPanel ma il codice nel metodo actionPerformed() non viene mai raggiunto. Sospetto che ci possa essere un problema con questo JPanel che non si concentra poiché utilizzo un CardLayout nella JFrame sovrastante. Spero sinceramente che qualcuno possa aiutarmi in questo modo poiché sta rallentando molto i miei progressi.

risposta