BUTTON1_MASK和BUTTON1_DOWN_MASK有什么区别?

9

从Java官网获取的信息:

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

我甚至不确定 "modifier constant" 是什么,更不用说是扩展版的了。 但我确实知道 BUTTON1_MASK 只是当左键点击时的整数表示。

2个回答

11

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(通常是左键)的点击,那么以下任一方法都应该能够正常工作:

如果您只需要检测按钮 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它包含更多有用的注释,并展示了内部发生的情况


已经很长时间了,但如果有人阅读这篇文章:在你的代码中为什么会有单个和号?例如 e.getModifiers() & MouseEvent.BUTTON1_MASK。这是表示一个集合的交集吗? - user2316667
1
@user2316667пјҢиҝҷжҳҜеӣ дёәgetModifiers()е’ҢgetModifiersEx()ж–№жі•иҝ”еӣһдёҖдёӘж•ҙж•°пјҢеҸҜд»Ҙдҝқеӯҳз»„еҗҲж Үеҝ—гҖӮиҰҒеңЁж•ҙж•°дёӯжөӢиҜ•д»»дҪ•дёҖдёӘзү№е®ҡзҡ„ж Үеҝ—пјҢжӮЁеҸҜд»ҘдҪҝз”Ё&иҝҗз®—з¬ҰжҹҘзңӢиҜҘзү№е®ҡдҪҚжҳҜеҗҰйқһйӣ¶пјҲиҝҷе°ұжҳҜ!= 0зҡ„еҗ«д№үпјүгҖӮеӣ жӯӨпјҢеҰӮжһңжӮЁж„ҹе…ҙи¶Јзҡ„жҳҜButton1дҪҚпјҢжӮЁеҸҜд»ҘдҪҝз”Ёзұ»дјјe.getModifiers() & BUTTON1_MASK != 0зҡ„жҺ©з ҒжқҘжЈҖжҹҘе®ғгҖӮиҝҷдёҚжҳҜеёғе°”&&иҝҗз®—з¬Ұ...йӮЈжҳҜеҸҰдёҖеӣһдәӢгҖӮ - Nate
请看此教程,了解更多关于“按位与”等运算符的内容(http://www.tutorialspoint.com/java/java_bitwise_operators_examples.htm)。 - Nate
1
最后一个链接已经失效。 - FDinoff
@FDinoff,谢谢。我相信我找到了另一个,它有关于getModifiers()的同样有用的注释。已更新答案。 - Nate

2

正如文档所述,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 则仅帮助确定哪个按钮被按下。


1
这个答案很简洁。 - smwikipedia

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接