2013-08-07 25 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類。