2013-06-30 14 views
5

Questo è nel costruttore di un JPanel ma non stampa nulla quando premo "h". Se è necessario più codice, posso fornirlo. Grazie!Java swinging keybinding

String hide = "hide"; 
    this.getInputMap().put(KeyStroke.getKeyStroke('h'), hide); 
    this.getActionMap().put(hide, new AbstractAction() { 
     @Override 
     public void actionPerformed(ActionEvent e) { 
       System.out.println("HIDDEN"); 
      if (isHidden){ 
       slide.setVisible(true); 
      }else{ 
       slide.setVisible(false); 
      } 
     } 
    }); 
+1

BTW puoi usare solo 'slide.setVisible (isHidden);', puoi usare 'getInputMap (JComponent.WHEN_IN_FOCUSED_WINDOW) 'se non sbaglio o quando antenato – nachokk

+0

non sono sicuro di seguirlo. slide.setVisible (true/false) funziona abbastanza bene per quanto ne so. – Yesha

+0

L'istruzione if/else con una singola riga di codice può fare la stessa cosa. – camickr

risposta

8
this.getInputMap().... 

si sta cercando di aggiungere le associazioni al default InputMap, che è l'InputMap quando il componente è attivo. Di default, JPanel non ha il focus. Dovresti provare a utilizzare uno degli altri InputMaps utilizzando il metodo getInputMap(int). O dovrai rendere il pannello focalizzabile e focalizzarlo.

Leggere il tutorial Swing su How to Use Key Bindings per ulteriori informazioni sulle variabili corrette da utilizzare per specificare la InputMap desiderata.

+0

Grazie! WHEN_IN_FOCUSED_WINDOW ha funzionato abbastanza bene. C'è qualcosa che posso sostituire con questo in modo che funzioni anche quando la finestra non è a fuoco? La mia applicazione è impostata per essere sempre in primo piano in modo che sia sempre visibile ma non necessariamente a fuoco. Grazie! – Yesha

+0

No. Swing risponde solo agli eventi quando è attivo. – camickr

+0

C'è un modo per renderlo permanente? – Yesha