2012-12-20 2 views
0

CTRL_DOWN_MASK + some key과 같은 키 바인딩과 함께 한정자를 사용하는 방법을 이해하지만 특정 작업을 제어 할 때 특정 작업 (예 : 'W') 및 위쪽 화살표가 모두 눌려 있습니다. CTRL_DOWN_MASK + some key + Up Arrow과 같은 것입니다.키 바인딩을 사용하여 3 개 이상의 키 조합에 작업 바인딩

나는 이것을 사용하여 특정 사운드 클립의 볼륨을 변경합니다. 따라서 CTRL_DOWN_MASK + W + Up Arrow을 모두 누르면 W JButton에 할당 된 사운드 클립에 대한 볼륨이 증가하고 CTRL_DOWN_MASK + W + Down Arrow이 있으면 해당 사운드 클립에 대한 볼륨이 감소합니다.

public void bindKey(JPanel base) 
    { 

     base.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(key, InputEvent.CTRL_DOWN_MASK),"Volume"+key); 
     base.getActionMap().put("Volume"+key, new AbstractAction(){ 
      public void actionPerformed(ActionEvent e) 
      { 
       //if(Up Arrow is being pressed.) 
       setGain(currentGain() + 1.0f); 

       //if(Down Arrow is being pressed.) 
       setGain(currentGain() - 1.0f); 
      } 
     }); 
    } 
+0

[로직을 직접] (http://stackoverflow.com/a/13440608/203657) – kleopatra

+0

감사합니다 @kleopatra 나는 그것을 체크 아웃합니다. – Alex

+0

@kleopatra 그 게시물에 대한 귀하의 답변을 통해 기존 액션 맵에 어떻게 구현 하시겠습니까? 나는 당신이 만드는 AbstractAction을 확장하는 것과 당신이 키 A + S + D의 매핑에 액션을 할당하는 방법을 이해하지 못합니다. – Alex

답변

3

더 많은 손이 필요할 것입니다 ... 나는 그것이 수정 자와 주키로 제한하는 이유라고 생각합니다. ctrl + w가 인터페이스를 시작한 다음 위로 또는 아래로 눌러 볼륨을 조정할 수 있다고 생각하십니까?

다른 옵션은 키 바인딩을 Ctrl + W 및 Ctrl + 위쪽 키 모두에 매핑하는 것입니다. 둘 다 활동할 때마다 행동을 취하십시오. 플래그를 설정하고 두 개의 매핑이 필요합니다. 하나는 누르기 용이고 다른 하나는 릴리스 용입니다. 지도 작성을위한 키 설정에 대한 자세한 내용은 Keystroke class을 참조하십시오.

+0

글쎄, 나는 두 손을 가지고 있기 때문에 Crtl + W와 내 손으로 위쪽 또는 아래쪽 화살표. 그러나 당신의 제안에 감사 드리며, 나는 두 매핑을 모두 추가하고 내가 할 수있는 것을 보도록 노력할 것입니다. – Alex

+0

설정 플래그를 말할 때 그 의미는 무엇입니까? – Alex

+0

@Alex 예 - 실현 가능성이 옳습니다. 그것은 일반적으로 편리하지 않습니다 (일반적으로 바인딩의 목표입니다). 아마도 그것이 빌드되지 않은 이유 일 것입니다. 플래그를 말할 때 나는 이벤트가 발생했는지 알려주는 부울 변수를 사용합니다. 따라서 ctrl + w (눌렀을 때와 놓는 경우)의 두 가지 이벤트가 눌려 졌음을 나타내는 부울 변수를 설정합니다. 위아래로 플래그를 확인하는 자체 이벤트가 발생합니다. 플래그가 설정된 경우 (true) 계속 볼륨을 조정합니다. 그렇지 않으면 아무것도하지 않습니다. –