mouseDragged没有返回适当的按钮

时间:2013-07-03 06:21:36

标签: java swing awt mouse-listeners

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

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

关于我如何做到这一点的任何建议?我假设我可以使用mouseClickedmousePressed进行解决方案,但我希望将其全部保留在mouseDragged内。

感谢您的时间和答案。

4 个答案:

答案 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();
}

请在另一台计算机上试用您的代码。