2011-10-21 2 views
1

키 이벤트를 사용하여 메소드를 활성화하는 프로그램을 작성하려고합니다. 이 코드는 Windows 컴퓨터에서 작동하지만 Mac으로 전환하면 "스페이스 바"가 눌려도 아무런 반응이 없습니다. 나는 이것이 다른 키 코드와 관련이 있다고 추정한다.Mac의 Java KeyEvents

public void keyPressed(KeyEvent e) { 
    if (e.getKeyCode() == KeyEvent.VK_SPACE) { 
     System.out.println("SPACEBAR"); 
     grid.stepGame(); 

    } 
} 

어떻게 Mac에서이 작업을 수행 할 수 있습니까?

편집 - 문제는 아래 답변을 사용하여 해결되었습니다. Mac에서는 프레임이 자동으로 포커스를 다시 얻지 못하기 때문에 keylistener가 작동하지 않는 이유는 다른 JComponent가 활성화 된 것입니다.

답변

4

중요한 문제는 확실치 않지만 핵심 수신기 대신 key bindings을 사용하면 문제가 사라질 수 있습니다. 자바 튜토리얼 사이트에서 :

참고 : 는, 특정 키에 특별한 반응을 정의하는 대신에 키 리스너의 키 바인딩을 사용합니다. 예

// Component that you want listening to your key 
JComponent component = ...; 
component.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_SPACE, 0), 
         "actionMapKey"); 
component.getActionMap().put("actionMapKey", 
         someAction); 
로서