检测MouseEvent上的Shift修改器是否因为单击摇摆而生成
我正在使用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
我究竟做错了什么? 我该如何修复我的代码?
请注意,该方法称为getModifier_s_(),带有“s”,因为它可以返回多个修饰符,使用按位“或”组合。 从技术上讲,使用“==”永远不正确:你应该使用按位“&”,如下所示:
if ((me.getModifiers() & InputEvent.BUTTON1_DOWN_MASK) != 0) ...
然后你会回应那个修饰符,即使其他修饰符存在。
你应该用
if ((me.getModifiersEx() & InputEvent.BUTTON1_DOWN_MASK) != 0)
要么
if ((me.getModifiers() & InputEvent.BUTTON1_MASK) != 0)