BUTTON1_MASK和BUTTON1_DOWN_MASK之间的区别是什么?
来自java网站:
BUTTON1_DOWN_MASK = The Mouse Button1 extended modifier constant. BUTTON1_MASK = The Mouse Button1 modifier constant.
我甚至不确定“修饰常数”是什么。 更不用说扩展了一个。 但我确实理解BUTTON1_MASK
只是单击鼠标左键时的整数表示。
BUTTON1_MASK
是指示来自按钮1的事件的掩码BUTTON1_DOWN_MASK
在概念上类似,但是该常量的扩展版本。
有两种方法可以返回这样的常量集: InputEvent#getModifiers()
和InputEvent#getModifiersEx()
,它们将分别返回修饰符常量或扩展修饰符常量。
从文档(粗体是我的) :
InputEvent.getModifiers()返回的按钮掩码仅反映更改状态的按钮,而不反映所有按钮的当前状态…要获取所有按钮和修改键的状态,请使用InputEvent.getModifiersEx()。
而且(大胆是我的) :
扩展修饰符表示事件发生后所有模态键的状态,例如ALT,CTRL,META和鼠标按钮
例如,如果用户按下按钮1,然后按下按钮2,然后以相同的顺序释放它们,则会生成以下事件序列:
MOUSE_PRESSED: BUTTON1_DOWN_MASK MOUSE_PRESSED: BUTTON1_DOWN_MASK | BUTTON2_DOWN_MASK MOUSE_RELEASED: BUTTON2_DOWN_MASK MOUSE_CLICKED: BUTTON2_DOWN_MASK MOUSE_RELEASED: MOUSE_CLICKED:
如果你想要的只是检测一个按钮1(通常是左)点击,那么其中任何一个都应该工作:
if ((e.getModifiers() & MouseEvent.BUTTON1_MASK) != 0) { System.out.println("BUTTON1_MASK"); } if ((e.getModifiersEx() & MouseEvent.BUTTON1_DOWN_MASK) != 0) { System.out.println("BUTTON1_DOWN_MASK"); }
此外,您可以查看这个开源版本的InputEvent
, 它有一些更有用的评论,并显示里面发生了什么
正如文档所述, BUTTON1_MASK
和BUTTON1_DOWN_MASK
是修饰符常量,即它们与MouseEvent#getModifiers
一起使用。 例如,它们不会被扩展,而是用作掩码值
@Override public void mousePressed(MouseEvent me) { if ((me.getModifiers() & InputEvent.BUTTON1_MASK) == InputEvent.BUTTON1_MASK) { System.out.println("Left button pressed."); } }
BUTTON1_DOWN_MASK
用于检测鼠标按钮的状态,而BUTTON1_MASK
只是帮助确定按下哪个按钮。