mouseDragged没有返回适当的按钮

Sea*_*A91 12 java swing awt mouse-listeners

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

我遇到了问题,mouseDragged()因为收到的MouseEvent回报为0 getButton().我对鼠标位置没有问题,甚至检测鼠标点击.该mouseClicked()事件返回相应的按钮getButton().

有关如何做到这一点的任何建议?我假设我可以使用mouseClicked,或者mousePressed,但我宁愿将这一切都保留在内mouseDragged.

谢谢你的时间和答案.

Jac*_*hle 21

正如评论和其他答案中所指出的,SwingUtilities为这样的案例提供了三种方法,它们适用于所有MouseEvent:

SwingUtilities.isLeftMouseButton(aMouseEvent);
SwingUtilities.isRightMouseButton(aMouseEvent);
SwingUtilities.isMiddleMouseButton(aMouseEvent);
Run Code Online (Sandbox Code Playgroud)

至于你的方法有什么问题,javadoc getButton()说:

返回哪些鼠标按钮已更改状态(如果有).

由于正在举行,而它向下按钮的状态不改变,getButton()通常会返回NO_BUTTONmouseDragged.要检查按键和修饰一样的状态Ctrl,Alt等在mouseDragged,你可以使用getModifiersEx().例如,下面的代码检查是否BUTTON1已关闭但BUTTON2不是:

int b1 = MouseEvent.BUTTON1_DOWN_MASK;
int b2 = MouseEvent.BUTTON2_DOWN_MASK;
if ((e.getModifiersEx() & (b1 | b2)) == b1) {
    // ...
}
Run Code Online (Sandbox Code Playgroud)


use*_*450 6

雅各布的权利getButton()不会让你按照设计按钮.但是,我找到了比位操作更清晰的解决方案getModifiersEx(),您也可以在mouseDragged以下内容中使用:

if (SwingUtilities.isLeftMouseButton(theMouseEvent)) {
    //do something
}
Run Code Online (Sandbox Code Playgroud)

中间按钮和右按钮存在类似的方法.