簡體   English   中英

了解Java中的機器人類

[英]Understanding Robot class in Java

我正在查看其中實現了Robot()類的代碼。 我不明白以下方法

    public void mousePressed(MouseEvent e) {
    System.out.println("Mouse Pressed");
    writer.println(EnumCommands.PRESS_MOUSE.getAbbrev());
    int button = e.getButton();
    int xButton = 16;
    if (button == 3) {
        xButton = 4;
    }
    writer.println(xButton);
    writer.flush();
}

這基本上是使用java套接字將MouseEvent發送到另一台PC。 有人可以解釋一下為什么xButton的值設置為16以及if語句中發生了什么嗎?

好吧,我是自從我使用機器人以來已經有一段時間了。 因此,數字16來自InputEvent: https : //github.com/openjdk-mirror/jdk7u-jdk/blob/master/src/share/classes/java/awt/event/InputEvent.java#L95-就是這樣很難將其硬編碼為16,該文檔建議使用這些BUTTONx_MASK字段( https://docs.oracle.com/javase/7/docs/api/java/awt/Robot.html#mousePress(int) ),而本地消息來源則建議使用BUTTONx_DOWN_MASK(向上滾動幾行)。
4甚至更糟糕,因為對於按鈕2和3,源僅引用Event.ALT / META_MASK,但是Event.META_MASK最終實際上是最后為4( https://github.com/openjdk-mirror/jdk7u- jdk / blob / master / src / share / classes / java / awt / Event.java#L84 ),因此可以根據需要右鍵單擊。

MouseEvent方法的getButton()返回按下的按鈕的編號。 您可以在此處閱讀更多內容。

至於這段代碼中發生的事情,它似乎是要檢查是否單擊了鼠標右鍵/鼠標右鍵( 此帖子說明了哪個按鈕對應於哪個數字),如果是,則發送int值4。 如果所按下的按鈕不是右鍵單擊,則它將發送int值16。

編輯

實際上,從更多角度看,我的原始答案並非100%正確。 方法談到了此篇被用來確定哪個按鈕MouseEvent從,不是直接的相關性來之間1 =左擊,2 =中等的點擊,3 =右鍵單擊。 我仍然認為這是基於MouseEvent是否是右鍵單擊來做出的決定,但是正如@Henry所說,如果沒有更多上下文,我不確定。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM