如何知道mouseDragged
事件中按下的按钮?
我在mouseDragged()
遇到问题,因为收到的MouseEvent
会为getButton()
返回0。我对鼠标位置没有问题,甚至检测鼠标点击。 mouseClicked()
事件会返回getButton()
的相应按钮。
关于我如何做到这一点的任何建议?我假设我可以使用mouseClicked
或mousePressed
进行解决方案,但我希望将其全部保留在mouseDragged
内。
感谢您的时间和答案。
答案 0 :(得分:20)
正如评论和其他答案中所指出的,SwingUtilities为这样的案例提供了三种方法,它们适用于所有MouseEvents:
SwingUtilities.isLeftMouseButton(aMouseEvent);
SwingUtilities.isRightMouseButton(aMouseEvent);
SwingUtilities.isMiddleMouseButton(aMouseEvent);
至于你的方法有什么问题,getButton()
的javadoc说:
返回哪些鼠标按钮已更改状态(如果有)。
由于按钮的状态在按下时没有变化,getButton()
通常会在NO_BUTTON
中返回mouseDragged
。要检查mouseDragged
中 Ctrl , Alt 等按钮和修饰符的状态,可以使用getModifiersEx()
。例如,以下代码会检查BUTTON1
是否已关闭但BUTTON2
不是:
int b1 = MouseEvent.BUTTON1_DOWN_MASK;
int b2 = MouseEvent.BUTTON2_DOWN_MASK;
if ((e.getModifiersEx() & (b1 | b2)) == b1) {
// ...
}
答案 1 :(得分:6)
Jacob是对的,getButton()
没有按照设计为您提供按钮。但是,我发现了比getModifiersEx()
上的位操作更清晰的解决方案,您也可以在mouseDragged
中使用:
if (SwingUtilities.isLeftMouseButton(theMouseEvent)) {
//do something
}
中间按钮和右按钮存在类似的方法。
答案 2 :(得分:2)
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");
}
}
答案 3 :(得分:0)
这可能是您的java沙箱的问题。
以下代码始终有效(几乎如您所见)。
@Override
public void mouseDragged(MouseEvent e) {
e.getButton();
}
请在另一台计算机上试用您的代码。