2013-06-30 7 views
5

Dies ist im Konstruktor eines JPanel, aber es hat nichts gedruckt, wenn ich „h“ drücken. Wenn mehr Code benötigt wird, kann ich es bereitstellen. Vielen Dank!Java Swing Tastenbelegung

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 können Sie nur 'slide.setVisible (isHidden);' verwenden, können Sie 'getInputMap (JComponent.WHEN_IN_FOCUSED_WINDOW) 'verwenden, wenn ich nicht verwechsele oder wenn Vorfahr – nachokk

+0

Ich bin mir nicht sicher, ob ich folge. slide.setVisible (true/false) funktioniert meines Wissens ziemlich gut. – Yesha

+0

Sie können die if/else-Anweisung mit einer einzigen Zeile Code, die das gleiche tut. – camickr

Antwort

8
this.getInputMap().... 

Sie versuchen, die Bindungen zu den Standard InputMap, die die InputMap ist hinzuzufügen, wenn die Komponente den Fokus hat. Standardmäßig hat JPanel keinen Fokus. Sie sollten versuchen, eine der anderen InputMaps mit der Methode getInputMap(int) zu verwenden. Oder Sie müssen das Panel fokussierbar machen und fokussieren.

Swing Tutorial Lesen Sie für weitere Informationen über die richtigen Variablen auf How to Use Key Bindings verwenden, um die gewünschte InputMap angeben.

+0

Danke! WHEN_IN_FOCUSED_WINDOW hat sehr gut funktioniert. Gibt es etwas, das ich ersetzen kann, damit es auch funktioniert, wenn das Fenster nicht fokussiert ist? Meine Anwendung ist so eingestellt, dass sie immer im Vordergrund steht, so dass sie immer sichtbar, aber nicht unbedingt scharf ist. Vielen Dank! – Yesha

+0

Nr. Swing reagiert nur auf Ereignisse, wenn es Fokus hat. – camickr

+0

Gibt es einen Weg, um es permanent im Fokus zu behalten? – Yesha