Java 鼠标标记未返回相应的按钮

Java 鼠标标记未返回相应的按钮,java,swing,awt,mouse-listeners,Java,Swing,Awt,Mouse Listeners,我如何知道在mouseDragged事件中按下的按钮 我在mouseDragged()中遇到问题,因为收到的MouseEvent为getButton()返回0。我对鼠标的位置没有问题,甚至检测到鼠标的点击。mouseClicked()事件为getButton()返回相应的按钮 有没有关于我如何做到这一点的建议?我假设我可以使用mouseClicked,或者mousePressed,但我更愿意将这一切都保留在mouseDragged中 感谢您的时间和回答。这可能是您的java沙箱的问题 以下代码一

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

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

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


感谢您的时间和回答。

这可能是您的java沙箱的问题

以下代码一直运行良好(如您所见,几乎如此)


请在另一台机器上尝试您的代码。

正如评论和其他答案中所指出的,SwingUtilities为此类情况提供了三种方法,适用于所有鼠标事件:

SwingUtilities.isLeftMouseButton(aMouseEvent);
SwingUtilities.isRightMouseButton(aMouseEvent);
SwingUtilities.isMiddleMouseButton(aMouseEvent);
至于您的方法的问题是什么,
getButton()
的javadoc说:

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

由于按下按钮时按钮的状态不会改变,
getButton()
通常会在
mouseDragged
中返回
NO\u按钮。要在
mouseDragged
中检查按钮和修改器(如Ctrl、Alt等)的状态,可以使用
getModifiersEx()
。例如,下面的代码检查
BUTTON1
是否已关闭,但
BUTTON2
是否未关闭:

int b1 = MouseEvent.BUTTON1_DOWN_MASK;
int b2 = MouseEvent.BUTTON2_DOWN_MASK;
if ((e.getModifiersEx() & (b1 | b2)) == b1) {
    // ...
}

Jacob说得对,
getButton()
并没有设计好按钮。但是,我在
getModifiersEx()
上找到了一个比位操作更干净的解决方案,您也可以在
mouseDragged
中使用它:

if (SwingUtilities.isLeftMouseButton(theMouseEvent)) {
    //do something
}

中键和右键也有类似的方法。

你能用鼠标右键拖动吗?我只用鼠标左键拖动。我测试了两个按钮,两个按钮都发送了0。你说得对。我想这对于可移植性来说也比
getModifiersEx()
(MacOS,Linux,…)@xav在可移植性方面完全相同(非常可移植),因为
isLeftMouseButton(…)
&co.方法就是根据它来实现的。看见这些都是简单易读的方便方法。关于第一部分(javadoc),您是对的,但我认为使用
SwingUtilities.isLeftMouseButton()
更好(请参见其他答案)@xav,因为这已经是公认的答案,我添加了SwingUtilities方法以提高可见性(并详细介绍了为什么可以选择
getModifiersEx
)。
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");
    }
}
if (SwingUtilities.isLeftMouseButton(theMouseEvent)) {
    //do something
}