2013-06-30 14 views
5

To jest w konstruktorze JPanel, ale nic nie drukuje po naciśnięciu "h". Jeśli potrzebujesz więcej kodu, mogę go dostarczyć. Dziękuję Ci!Keybinding Java swing

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 można używać tylko 'slide.setVisible (isHidden);', możesz użyć 'getInputMap (JComponent.WHEN_IN_FOCUSED_WINDOW) ', jeśli się nie mylę lub gdy przodek – nachokk

+0

Nie jestem pewien czy podążam. slide.setVisible (true/false) działa całkiem dobrze według mojej wiedzy. – Yesha

+0

Możesz użyć instrukcji if/else używając pojedynczego wiersza kodu, który robi to samo. – camickr

Odpowiedz

8
this.getInputMap().... 

Próbujesz dodać powiązania z domyślnie InputMap, który jest InputMap gdy składnik aktywny. Domyślnie JPanel nie ma fokusu. Powinieneś spróbować użyć jednej z innych InputMaps przy użyciu metody getInputMap(int). Albo musisz sprawić, aby panel był skupiony i skupić się na nim.

Przeczytaj samouczek Swinga na temat How to Use Key Bindings, aby uzyskać więcej informacji na temat właściwych zmiennych, których można użyć do określenia żądanej mapy wejściowej.

+0

Dziękujemy! WHEN_IN_FOCUSED_WINDOW działało całkiem dobrze. Czy jest coś, co mogę zastąpić, aby działało, nawet gdy okno nie jest skupione? Moja aplikacja jest zawsze na wierzchu, więc zawsze będzie widoczna, ale niekoniecznie w centrum uwagi. Dzięki! – Yesha

+0

Nie. Swing reaguje tylko na zdarzenia, gdy ma fokus. – camickr

+0

Czy istnieje sposób, aby nadać mu stały nacisk? – Yesha