2013-08-07 3 views
1

나는 Java의 Robot 클래스가 어떻게 작동하는지 읽고 이해했다. 내가 묻고 싶은 것은 if 문 안에서 마우스 버튼을 눌렀다가 놓는 것입니다. 예를 들어, 스페이스 버튼을 눌렀다 놓은 직후 (그리고 바로 직후)에 클릭을해야합니다. 내가 코드를 사용합니다 : 불행하게도로봇 클래스 - 버튼을 누른 경우?

try { 
    Robot robot = new Robot(); 
    if (/*insert my statement here*/) { 
    try { 
     robot.mousePress(InputEvent.BUTTON1_MASK); 
     robot.mouseRelease(InputEvent.BUTTON1_MASK); 
    } catch (InterruptedException ex) {} 
    } 
} catch (AWTException e) {} 
+0

당신은 (보류 SPACE -> 보도 CLICK)을 키 - 마우스 조합을 구현하려고, 또는 (키를 누른 후) 당신은 시간의 짧은 창을 갖고 싶어 할 마우스 버튼을 클릭? – GGrec

+0

스페이스 버튼을 누른 후 클릭하십시오 : –

답변

1

을, (이 이지만 JNI/JNA를 사용해야 할 것입니다 사실 잘) 직접 하드웨어를 제어 할 수있는 방법이 없다, 이는 당신이 단순히 키가 눌러 졌는지 확인할 수 없습니다.

KeyBindings을 사용하여 스페이스 키를 작업에 바인딩 할 수 있습니다. 스페이스 바를 누를 때 true 플래그를 설정하면 해당 플래그가 false으로 설정됩니다. 이 솔루션을 사용하려면 응용 프로그램이 GUI 응용 프로그램이어야하며 콘솔 응용 프로그램에서는 작동하지 않습니다. 키보드 이벤트가 발생 될 때

Action pressedAction = new AbstractAction() { 
    public void actionPerformed(ActionEvent e) { 
     spaceBarPressed = true; 
    } 
}; 

Action releasedAction = new AbstractAction() { 
    public void actionPerformed(ActionEvent e) { 
     spaceBarPressed = false; 
    } 
}; 

oneOfYourComponents.getInputMap().put(KeyStroke.getKeyStroke("SPACE"), "pressed"); 
oneOfYourComponents.getInputMap().put(KeyStroke.getKeyStroke("released SPACE"), "released"); 
oneOfYourComponents.getActionMap().put("pressed", pressedAction); 
oneOfYourComponents.getActionMap().put("released", releasedAction); 

다음에, 직접 마우스를 눌러 실행하는 것입니다 할

try { 
    Robot robot = new Robot(); 
    if (spaceBarPressed) { 
     try { 
      robot.mousePress(InputEvent.BUTTON1_MASK); 
      robot.mouseRelease(InputEvent.BUTTON1_MASK); 
     } catch (InterruptedException ex) { 
      //handle the exception here 
     } 
    } 
} catch (AWTException e) { 
    //handle the exception here 
} 

GGrec가 썼던 것처럼, 더 나은 방법을 사용

Action pressedAction = new AbstractAction() { 
    public void actionPerformed(ActionEvent e) { 
     try { 
      robot.mousePress(InputEvent.BUTTON1_MASK); 
      robot.mouseRelease(InputEvent.BUTTON1_MASK); 
     } catch (InterruptedException ex) { 
      //handle the exception here 
     } 
    } 
}; 
+0

자세한 답변을 보내 주셔서 감사합니다! 내가 비디오 게임을 원한다면 GUI 밖에 있어야합니다. ( –

1

내 키보드 이벤트를 청취하고 키보드 이벤트를 수신하면 if statement없이 코드를 실행하는 것이 좋습니다. 캔버스에 리스너를 추가하십시오.

매번 Robot 클래스를 다시 만들지 않도록 조심하십시오.

관련 문제