检测由单击摇摆生成的MouseEvent上的Shift修改器

时间:2011-04-01 19:01:56

标签: java swing mouseevent modifiers

我正在使用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(rigth。我期待的那样),但现在似乎修改器也被更改并且与BUTTON1_DOWN_MASK的比较失败。

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

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

2 个答案:

答案 0 :(得分:10)

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

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

然后你会回复那个修饰符,即使其他修饰符存在。

答案 1 :(得分:0)

你应该使用

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

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