2012-10-24 4 views
-1

화살표 키가 눌 렸는지 여부를 수신하는 패널에 키 바인딩을 구현하고 있습니다.키 바인딩이 작동하지 않습니다. Java Swing

누를 경우 작업을 수행합니다. 내 코드 :

private void createKeyBindings(){ 
     actionMap = this.getActionMap(); 
     inputMap = this.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT); 
     this.getInputMap().put(KeyStroke.getKeyStroke("a"), 
       "pressedUpArrow"); 
     this.getInputMap().put(KeyStroke.getKeyStroke("released UP"), 
       "releasedUpArrow"); 
     this.getActionMap().put("pressedUpArrow", 
       new PressedUpArrowAction()); 
     this.getActionMap().put("releasedUpArrow", 
       new ReleasedUpArrowAction()); 
    } 

행동이 작동 (I가 버튼에 매핑하고 버튼을 누르면,이 조치는 어떻게해야 무엇 않습니다).

이러한 키 바인딩은 내 패널 (탭 패널의 탭)에 호출됩니다. 나는 키를 누를 때마다 UP 키를 누른 채로 시도했다 (문제가 아닌지 확인하기 위해). 해당 탭에 포커스가있을 때이 키를 입력합니다.

어떤 조언이 필요합니까?

+2

@stephen의 답변 외에도 [SSCCE] (http://sscce.org/) – mKorbel

+2

을 게시하는 것이 더 도움이되도록 GUI에 출력 할 위치를 지정하십시오. 위의 스 니펫에서 키 입력을 등록하는 위치 잘못된 inputMap : replace this.getInputMap(). put (..) with inputMap.put (...) – kleopatra

+0

고마워요, 해결되었지만 해결되지 않았습니다. GUI에 출력되는 내용이 없습니다. PressedUpArrowAction은 일시적으로 오류 메시지 만 출력합니다. Action은 작동하는데, 왜냐하면 내가 setAction을 사용하여 키에 바인딩 할 때 눌렀을 때 작동하기 때문입니다. – Sven

답변

3

문제의 가능한 원인 중 하나는 이것이다 :

this.getInputMap().put(KeyStroke.getKeyStroke("a"), 
      "pressedUpArrow"); 

그것은이 있어야하지 않나요?

this.getInputMap().put(KeyStroke.getKeyStroke("UP"), 
      "pressedUpArrow"); 

현재를 코딩 한 방법, 하나의 키의 언론과 다른 키의 출시에 PressedUpArrowAction()ReleasedUpArrowAction() 화재.

+0

예, 위 키를 오용하지 않았 으면 테스트 용이었습니다. – Sven

관련 문제