[英]mouseDragged not returning appropriate button down
如何知道在mouseDragged
事件中按下的按鈕?
我在mouseDragged()
中mouseDragged()
問題,因為收到的MouseEvent
為getButton()
返回0。 我對鼠標位置沒有問題,甚至檢測鼠標點擊。 mouseClicked()
事件返回getButton()
的相應按鈕。
有關如何做到這一點的任何建議? 我假設我可以使用mouseClicked
或mousePressed
進行解決方法,但我更喜歡將它們全部保留在mouseDragged
。
謝謝你的時間和答案。
正如評論和其他答案中所指出的,SwingUtilities為這樣的案例提供了三種方法,它們適用於所有MouseEvent:
SwingUtilities.isLeftMouseButton(aMouseEvent);
SwingUtilities.isRightMouseButton(aMouseEvent);
SwingUtilities.isMiddleMouseButton(aMouseEvent);
至於你的方法有什么問題, getButton()
的javadoc說:
返回哪些鼠標按鈕已更改狀態(如果有)。
由於正在舉行,而它按下此按鈕的狀態不改變, getButton()
通常會返回NO_BUTTON
中mouseDragged
。 要在mouseDragged
檢查按鈕和修改器(如Ctrl , Alt等)的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.