2016-10-31 4 views
0

* 업데이트 - MacBook에서 프로젝트를 가져 와서 동일한 컴퓨터 코드 (동일한 코드)로 옮기면 코드가 정상적으로 작동합니다! 아무도 왜 이런 일이 일어날 지 알고 있습니까?Java - 키를 누른 상태에서 KeyBind가 작동을 멈춤

이것이 스택 오버플로에 대한 나의 첫 번째 질문이므로 올바른 형식을 지정하는 것이 가장 좋습니다.

키 이벤트 (A & Z)를 위아래로 움직이기 위해 외륜이 필요한 간단한 Pong 프로그램을 만들고 있습니다. 키 이벤트는 키를 입력 할 때 완벽하게 작동하지만 어떤 이유로 키를 길게 누르면 키 이벤트가 완전히 작동하지 않습니다. 즉, 키를 입력해도 프로그램을 다시 시작할 때까지 아무 것도 등록하지 않습니다. .

나는 2 시간 동안 아무런 도움없이 검색했습니다. 유사한 모든 질문은 포커스가 문제가되고 InputMap 내부에 JComponent.WHEN_IN_FOCUSED_WINDOW를 추가하는 대답으로 끝납니다. 그러나 나는 이것을 시도하고 전혀 도움이되지 않거나 내 문제를 해결하지 못한다. 당신은 당신이 키를 누르고 있으면 일반적으로 나타나는 맥 OS 악센트 팝업을 중지해야

public class ColorPanel extends JPanel implements ActionListener{ 
    public ColorPanel(Color backColor, int width, int height){ 

    //Non Relavent coding removed 

    //Code for KeyBinding 

    InputMap im = getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW); 
    ActionMap am = getActionMap(); 

    im.put(KeyStroke.getKeyStroke(65, 0, false), "actionName"); 
    im.put(KeyStroke.getKeyStroke(65, 0, true), "actionName"); 
    im.put(KeyStroke.getKeyStroke(KeyEvent.VK_Z, 0, true), "actionName"); 
    im.put(KeyStroke.getKeyStroke(KeyEvent.VK_Z, 0, false), "actionName"); 

    am.put("actionName", new AbstractAction("actionName") { 
      public void actionPerformed(ActionEvent e) { 
      //System.out.println("---" + e.getActionCommand() + "---"); 
      if(e.getActionCommand().equals("a")){ 
       System.out.println("a!"); 
      }else if (e.getActionCommand().equals("z")){ 
       System.out.println("z!"); 
      } 
      } 
     }); 


} 
+1

Windows 7에서 JDK8을 사용하여 저에게 잘 작동합니다. JFrame에서 단일 패널을 사용했습니다. '이것이 스택 오버플로에 관한 나의 첫 번째 질문입니다. 문제를 보여주는 적절한 [SSCCE] (http://sscce.org/)를 게시하십시오. 프로그램에 문제의 원인이 될 수있는 것이 있는지 여부는 알 수 없습니다. – camickr

+0

나는 당신이 말한 것을 조사하고 Mac을 사용하면서 Windows 장치에서 내 프로젝트를 시도했습니다. 문제가 사라졌습니다!? 왜 이런 일이 일어날 지 아십니까? –

+0

나는 Mac을 사용 해 본 적이 없으므로 문제가 무엇인지 잘 모릅니다. 그러나 Windows에서 키를 누른 상태에서 "눌렀다, 밟다, 눌렀다, 놓아 버림"과 같은 이벤트가 생성됩니다. 즉 "릴리스 된"이벤트는 한 번만 생성됩니다. Mac에서는 "누르거나, 놓고, 누르고, 놓고, 누르거나, 풀어줍니다"라고 생각합니다. 그것은 어떤 이유로 릴리스 된 이벤트가 계속 생성됩니다. 아마 이것은 차이를 일으키는 것입니까? – camickr

답변

관련 문제