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_MASKBUTTON1_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只是帮助确定按下哪个按钮。