2014-12-14 3 views
1

JFrame으로 피아노를 만들고 있지만 약간의 문제가 있습니다. 피아노의 키를 눌렀을 때 녹색으로 변하고, 연주 할 음표를 원합니다.하나의 키에 여러 개의 키 바인딩이 있습니까?

b.getInputMap(JButton.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke('q'), "playD"); 
b.getActionMap().put("playD", playC);  //playC refers to another Action class  

b.getInputMap(JButton.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke('q'), "SetBg"); 
b.getActionMap().put("SetBg", db); //db refers to another Action class 

그러나 이러한 방법은 서로 무시합니다. 지금은 색상 만 변경되고 메모는 재생되지 않습니다. "SetBg"메서드를 제거하면 메모가 재생됩니다.

이 문제를 해결할 방법이 있습니까?

두 번째 문제점은 키가 실제로 다시 릴리스되는 시점을 알 수없는 것입니다. 시도했는데 .put(Keystroke.getKeyStroke("released q"), "DoSomething"); 하지만 아무 것도하지 않는 것 같습니다.

미리 감사드립니다.

답변

1

저는 전문가는 아니지만 두 번째 바인딩이 첫 번째 바인딩 및 모든 이전 바인딩을 차단하지 않고 동일한 키 스트로크에 두 개의 키 바인딩을 추가 할 수 있다고 생각하지 않습니다. 다시 말해, 각 특정 키 입력 및 입력 맵에 대해 단일 바인딩 만 가능하다고 저는 믿습니다.

내가 다른이 작업을 수행 할 것, 그런 말로 미루어 보아 :

  • 내가 모델 - 뷰 - 컨트롤 (MVC) 디자인 패턴 기준 중 하나에 부합하는 내 프로그램을 구성 것이다.
  • 나는 컨트롤의 내 수 바인딩 부분, 액션의 유일한 기능은 뭔가 키를 누르거나 놓은되었다는 것을 여기에, 모델의 상태를 변경하는 것
  • 이있을 것이다.
  • 모델에는 많은 뷰 수신기가있을 수 있으며 모델 상태의 변경 사항에 따라 모두 응답 할 수 있습니다. 여기에서 모델 변경에 대한 두 가지 응답을 찾을 수 있습니다.
+0

고맙습니다! 나는 조금 다르게 그것을했고 지금 작동합니다. – aze45sq6d

관련 문제