从Java官网获取的信息:
BUTTON1_DOWN_MASK = The Mouse Button1 extended modifier constant.
BUTTON1_MASK = The Mouse Button1 modifier constant.
我甚至不确定 "modifier constant" 是什么,更不用说是扩展版的了。
但我确实知道 BUTTON1_MASK
只是当左键点击时的整数表示。
BUTTON1_MASK
是指事件来自按钮1的掩码。 BUTTON1_DOWN_MASK
在概念上类似,但是它是该常量的扩展版本。
有两种方法可以返回这些常量集: InputEvent#getModifiers()
和InputEvent#getModifiersEx()
,它们分别返回修饰符常量或扩展的修饰符常量。
由InputEvent.getModifiers()返回的按钮掩码仅反映更改状态的按钮,而不是所有按钮的当前状态。要获取所有按钮和修改键的状态,请使用InputEvent.getModifiersEx()。
扩展修饰符表示所有模态键的状态,例如ALT、CTRL、META和鼠标按钮,就在事件发生后
例如,如果用户按下按钮1,然后按下按钮2,然后以相同的顺序释放它们,则生成以下事件序列:
如果你只想检测一个按钮 1(通常是左键)的点击,那么以下任一方法都应该能够正常工作: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
则仅帮助确定哪个按钮被按下。
getModifiers()
е’ҢgetModifiersEx()ж–№жі•иҝ”еӣһдёҖдёӘж•ҙж•°пјҢеҸҜд»Ҙдҝқеӯҳз»„еҗҲж Үеҝ—гҖӮиҰҒеңЁж•ҙж•°дёӯжөӢиҜ•д»»дҪ•дёҖдёӘзү№е®ҡзҡ„ж Үеҝ—пјҢжӮЁеҸҜд»ҘдҪҝз”Ё&
иҝҗз®—з¬ҰжҹҘзңӢиҜҘзү№е®ҡдҪҚжҳҜеҗҰйқһйӣ¶пјҲиҝҷе°ұжҳҜ!= 0
зҡ„еҗ«д№үпјүгҖӮеӣ жӯӨпјҢеҰӮжһңжӮЁж„ҹе…ҙи¶Јзҡ„жҳҜButton1дҪҚпјҢжӮЁеҸҜд»ҘдҪҝз”Ёзұ»дјјe.getModifiers() & BUTTON1_MASK != 0
зҡ„жҺ©з ҒжқҘжЈҖжҹҘе®ғгҖӮиҝҷдёҚжҳҜеёғе°”&&
иҝҗз®—з¬Ұ...йӮЈжҳҜеҸҰдёҖеӣһдәӢгҖӮ - NategetModifiers()
的同样有用的注释。已更新答案。 - Nate