Detecting Shift modifiers on MouseEvent generated from click in swing

こ雲淡風輕ζ 提交于 2019-12-07 00:04:19

问题


I'm handling some MouseEvent in a GUI application using Java Swing.

Since now i was analyzing mouse events inside mousePressed method, only to determine if a left or right click happened.

My code was:

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

Now my application is becoming more complicated and I need also to check if Shift button was pressed while mouse was left clicking. I would like to do something like this:

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

Now this doesn't work. In particular if I click the left button while holding SHIFT isShiftDown returns true (rigth. i was expecting that), but now seems that modifiers are also changed and the comparison with BUTTON1_DOWN_MASK fails.

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

What am I doing wrong? How can I fix my code?


回答1:


Note that the method is called getModifier_s_(), with an "s", because it can return more than one modifier, combined using bitwise "or". It's technically never correct to use "==": you should use bitwise "&", like this:

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

then you'll respond to that one modifier, even if others are present.




回答2:


You should use

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

or

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


来源:https://stackoverflow.com/questions/5517674/detecting-shift-modifiers-on-mouseevent-generated-from-click-in-swing

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!