簡體   English   中英

mouseDragged沒有返回適當的按鈕

[英]mouseDragged not returning appropriate button down

如何知道在mouseDragged事件中按下的按鈕?

我在mouseDragged()mouseDragged()問題,因為收到的MouseEventgetButton()返回0。 我對鼠標位置沒有問題,甚至檢測鼠標點擊。 mouseClicked()事件返回getButton()的相應按鈕。

有關如何做到這一點的任何建議? 我假設我可以使用mouseClickedmousePressed進行解決方法,但我更喜歡將它們全部保留在mouseDragged

謝謝你的時間和答案。

正如評論和其他答案中所指出的,SwingUtilities為這樣的案例提供了三種方法,它們適用於所有MouseEvent:

SwingUtilities.isLeftMouseButton(aMouseEvent);
SwingUtilities.isRightMouseButton(aMouseEvent);
SwingUtilities.isMiddleMouseButton(aMouseEvent);

至於你的方法有什么問題, getButton()的javadoc說:

返回哪些鼠標按鈕已更改狀態(如果有)。

由於正在舉行,而它按下此按鈕的狀態不改變, getButton()通常會返回NO_BUTTONmouseDragged 要在mouseDragged檢查按鈕和修改器(如CtrlAlt等)的mouseDragged ,可以使用getModifiersEx() 例如,下面的代碼檢查BUTTON1是否已關閉,但BUTTON2不是:

int b1 = MouseEvent.BUTTON1_DOWN_MASK;
int b2 = MouseEvent.BUTTON2_DOWN_MASK;
if ((e.getModifiersEx() & (b1 | b2)) == b1) {
    // ...
}

Jacob是正確的, getButton()沒有按照設計獲得按鈕。 但是,我在getModifiersEx()上找到了比bit操作更清晰的解決方案,你也可以在mouseDragged使用:

if (SwingUtilities.isLeftMouseButton(theMouseEvent)) {
    //do something
}

中間按鈕和右按鈕存在類似的方法。

int currentMouseButton = -1;
@Override
public void mousePressed(MouseEvent e) {
    currentMouseButton = e.getButton();
}

@Override
public void mouseReleased(MouseEvent e) {
    currentMouseButton = -1;
}

@Override
public void mouseDragged(MouseEvent e) {
    if (currentMouseButton == 3) {
        System.out.println("right button");
    }
}

這可能是您的java沙箱的問題。

以下代碼一直運行良好(幾乎,如您所見)。

@Override
public void mouseDragged(MouseEvent e) {
    e.getButton();
}

請在另一台機器上試用您的代碼。

暫無
暫無

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

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