【发布时间】:2018-03-15 05:33:41
【问题描述】:
如果我按住两个鼠标按钮,然后拖动鼠标,然后释放其中一个按钮,我如何确定哪个按钮被释放?按下的按钮可以通过 MouseEvent.getModifiersEx() 检索,但似乎没有任何方法可以判断哪个按钮被释放,因为在释放事件触发之前按下的所有按钮都存储在该掩码中:
public void mouseReleased(MouseEvent e) {
int b1 = MouseEvent.BUTTON1_DOWN_MASK;
int b2 = MouseEvent.BUTTON2_DOWN_MASK;
System.out.println(e.getButton()) // prints "0" when the mousereleased
// event follows a mouseDragged
// event
if ((mouseEvent.getModifiersEx() & b1) == b1) {
System.out.println("button 1 released");
} else if ((mouseEvent.getModifiersEx() & b2) == b2) {
System.out.println("button 2 released");
}
/*
Following a mouseDragged event, assuming button 1 and button 2
were pressed before either was released, the first if clause
evaluates to true regardless of which button was actually released.
In other words, releasing button 2 in this scenario will print
"button 1 released"
*/
}
如果 mouseReleased 事件之前有 mousePressed 事件很容易,但是当它之前有 mouseDragged 时,我不能简单地调用 getButton()...
【问题讨论】:
-
请发布您最好的minimal reproducible example 尝试向我们展示您的代码是如何正常工作的。
-
你试过
SwingUtilities#isLeftMouseButton和isRightMouseButton吗? -
@HovercraftFullOfEels 感谢您的反馈。我用一个具体的代码块替换了抽象代码块,以更好地说明我的问题。
-
谢谢,它有效。我不知道为什么我认为 getButton 在之前的拖动事件之后返回 0。