9

从java网站:

BUTTON1_DOWN_MASK = The Mouse Button1 extended modifier constant.
BUTTON1_MASK = The Mouse Button1 modifier constant.

我什至不确定什么是“修饰符常数”。更不用说扩展了。但是,我确实理解这BUTTON1_MASK只是单击鼠标左键时的整数表示。

4

2 回答 2

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:

如果您只想检测按钮 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它有一些更有用的评论,并显示了里面发生了什么

于 2013-05-07T02:44:22.887 回答
2

正如文档所述,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简单地帮助确定按下了哪个按钮。

于 2013-05-07T02:29:04.977 回答