8

我正在使用 Java Swing 在 GUI 应用程序中处理一些 MouseEvent。

因为现在我在 mousePressed 方法中分析鼠标事件,只是为了确定是否发生了左击或右击。

我的代码是:

public void mousePressed(MouseEvent me) {
    if (me.getModifiers == InputEvent.BUTTON1_DOWN_MASK){
     //left click
    }else if (me.getModifiers == InputEvent.BUTTON3_DOWN_MASK){
     //right click
     }

现在我的应用程序变得越来越复杂,我还需要检查鼠标左键单击时是否按下了 Shift 按钮。我想做这样的事情:

public void mousePressed(MouseEvent me) {
    if (me.getModifiers == InputEvent.BUTTON1_DOWN_MASK && me.isShiftDown()){
     //left click
    }

现在这行不通了。特别是如果我在按住 SHIFT 的同时单击左键 isShiftDown 会返回 true (没错。我期待这一点),但现在看来修饰符也发生了变化,并且与 BUTTON1_DOWN_MASK 的比较失败了。

me.getModifiers == InputEvent.BUTTON1_DOWN_MASK //failed..modifiers are changed

我究竟做错了什么?如何修复我的代码?

4

2 回答 2

12

请注意,该方法称为 getModifier_s_(),带有“s”,因为它可以返回多个修饰符,使用按位“或”组合。从技术上讲,使用“==”是不正确的:您应该使用按位“&”,如下所示:

if ((me.getModifiers() & InputEvent.BUTTON1_DOWN_MASK) != 0) ...

然后你会响应那个修饰符,即使其他修饰符在场。

于 2011-04-01T19:13:59.990 回答
1

你应该使用

if ((me.getModifiersEx() & InputEvent.BUTTON1_DOWN_MASK) != 0)

或者

if ((me.getModifiers() & InputEvent.BUTTON1_MASK) != 0)
于 2016-10-11T20:34:55.027 回答