* 업데이트 - 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!");
}
}
});
}
Windows 7에서 JDK8을 사용하여 저에게 잘 작동합니다. JFrame에서 단일 패널을 사용했습니다. '이것이 스택 오버플로에 관한 나의 첫 번째 질문입니다. 문제를 보여주는 적절한 [SSCCE] (http://sscce.org/)를 게시하십시오. 프로그램에 문제의 원인이 될 수있는 것이 있는지 여부는 알 수 없습니다. – camickr
나는 당신이 말한 것을 조사하고 Mac을 사용하면서 Windows 장치에서 내 프로젝트를 시도했습니다. 문제가 사라졌습니다!? 왜 이런 일이 일어날 지 아십니까? –
나는 Mac을 사용 해 본 적이 없으므로 문제가 무엇인지 잘 모릅니다. 그러나 Windows에서 키를 누른 상태에서 "눌렀다, 밟다, 눌렀다, 놓아 버림"과 같은 이벤트가 생성됩니다. 즉 "릴리스 된"이벤트는 한 번만 생성됩니다. Mac에서는 "누르거나, 놓고, 누르고, 놓고, 누르거나, 풀어줍니다"라고 생각합니다. 그것은 어떤 이유로 릴리스 된 이벤트가 계속 생성됩니다. 아마 이것은 차이를 일으키는 것입니까? – camickr