BUTTON1_MASK和BUTTON1_DOWN_MASK有什么区别?

use*_*667 8 java input

来自java网站:

BUTTON1_DOWN_MASK = The Mouse Button1 extended modifier constant.
BUTTON1_MASK = The Mouse Button1 modifier constant.
Run Code Online (Sandbox Code Playgroud)

我甚至不确定"修饰常数"是什么.更不用说扩展了一个.但我确实理解这BUTTON1_MASK只是单击鼠标左键时的整数表示.

Nat*_*ate 10

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:
Run Code Online (Sandbox Code Playgroud)

如果你想要的只是检测一个按钮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");
}
Run Code Online (Sandbox Code Playgroud)

此外,您可以查看此开源版本InputEvent,其中包含一些更有用的注释,并显示内部发生的情况