2013-05-07 2 views
0

Enter 키를 눌러 시뮬레이션하고 싶습니다. "키 누르기가 등록되어있는 경우 그렇다면, 콘솔은 인쇄한다, 나는JUnit 테스트 용 Java에서 키 입력 시뮬레이션

public void keyPressed(KeyEvent e) { 
     if (e.getKeyChar() == KeyEvent.VK_ENTER) { 
      System.out.println("ENTER KEY PRESSED"); 
      // DO SOMETHING; 
     } 
    } 

robot = new Robot(); 
robot.keyPress(KeyEvent.VK_ENTER); 
try{Thread.sleep(50);}catch(InterruptedException e){} 
robot.keyRelease(KeyEvent.VK_ENTER); 

을 내 주요 코드에서 : 나는 로봇 클래스를 사용하여 시도했지만 작동하지 않는 것 ENTER KEY PRESSED "라고 말하지만, 그렇게하지는 않습니다.

도움 주셔서 감사합니다.

또한 로봇 수업없이 키 이벤트를 시뮬레이트하는 방법을 알고 있다면 아래에 게시하십시오 :).

출처 : How to simulate keyboard presses in java?

+1

당신의 요소에 초점을 요청 않았다 'KeyListener'를 추가 했습니까? – BackSlash

+0

@BackSlash : 고마워요! 나는 그것을 잊어 버렸다. ( – newtothissite

+0

당신이 그것을 가장 좋다고 생각한다면 받아 들일 수있다. :) – BackSlash

답변

0

나는 이전에 구성 요소에 KeyListener을 추가 한 것으로 가정합니다. 되지 않은 경우,이를 사용하십시오 :

yourComponent.addKeyListener(yourKeyListener); 

당신이 이미를하고있는 당신이 부가 KeyListener

시도를 추가하는 것이 여전히 작동하지 않습니다, 아마 당신은 구성 요소에 초점을 요청하지 않은 경우 robot.keyPress 전에 :

yourComponent.requestFocus(); 

yourComponentKeyPressed 이벤트를 생성해야하는 구성 요소입니다

+0

이것은 실제로 문제가되는 구성 요소의 작업에만 집중할 예정입니다. 추신 : requestFocus 대신 requestFocusInWindow를 사용해야합니다.) – MadProgrammer

+0

@MadProgrammer 모든 Component 및 JComponent 확장 클래스에는 'requestFocus' 메서드가 있으므로 모든 GUI 구성 요소 유형에서 작동해야한다고 생각합니다. – BackSlash

+0

[ docs] (http://docs.oracle.com/javase/7/docs/api/javax/swing/JComponent.html#requestFocus()), * "이 메소드의 사용은 플랫폼의 동작이므로 권장하지 않습니다. 의존성이없는 대신 requestFocusInWindow()를 사용하는 것이 좋습니다. 포커스에 대한 자세한 내용은 The Java Tutorial의 섹션 Focus Subsystem 사용 방법을 참조하십시오. – MadProgrammer

2

Robot을 사용하는 방법에 문제가있는 것은 아닙니다.

는 첨부 된 구성 요소가 포커스 가능하고 포커스가있는 경우에만 응답합니다.

먼저 KeyListener을 사용하지 말고 key bindings을 사용하십시오. 그러면 초점 문제를 해결하는 데 도움이됩니다.

둘째, 윈도우 실제로 키보드 포커스와 상호 작용을 시도하고 있는지 확인 (그리고 초점은 Enter 키를 소모합니다 컨트롤에없는)