2013-05-07 1350 views
8

从Java网站:BUTTON1_MASK和BUTTON1_DOWN_MASK的区别是什么?

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

我甚至不知道什么是“修饰符常量”是。更不用说扩展的了。 但我明白BUTTON1_MASK只是点击鼠标左键的整数表示。

回答

8

BUTTON1_MASK是指示事件掩码从按钮1 BUTTON1_DOWN_MASK来到是概念性地相似,但是扩展版本恒定的。

有两种方法返回常量的这种组:InputEvent#getModifiers()InputEvent#getModifiersEx(),它们将返回改性剂常量或分别延伸改性剂常数。

From the docs (bold is mine)

由InputEvent.getModifiers()返回按钮面具只反映 ,改变状态,而不是当前状态所有按钮的 ...要获得所有的状态按钮按钮和修饰符 键,请使用InputEvent.getModifiersEx()。

and also (bold is mine)

扩展修饰符表示所有模式键,如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,which has some more useful comments, and shows what's happening inside

+0

这是一个很长的时间,但任何人都读这个:为什么在你的代码中有单个&符号?即e.getModifiers()和MouseEvent.BUTTON1_MASK。这是代表一组交集? – user2316667 2013-08-31 22:31:26

+1

@ user2316667,这是因为'getModifiers()'和[getModifiersEx()](http://docs.oracle.com/javase/7/docs/api/java/awt/event/InputEvent.html#getModifiersEx%28 %29)方法返回一个整数,它可以包含*组合*的标志。要测试整数中的任何**一个**特定标志,可以使用'&'运算符来查看该特定位是否非零(这是'!= 0'的来源)。所以,如果Button1位是你感兴趣的,你可以使用像e.getModifiers()&BUTTON1_MASK!= 0'这样的掩码来检查它。这不是布尔的&&操作符......这是不同的。 – Nate 2013-08-31 22:37:40

+0

[有关更多信息,请参阅本教程](http://www.tutorialspoint.com/java/java_bitwise_operators_examples.htm),例如“按位与”运算符。 – Nate 2013-08-31 22:38:53

3

作为文档状态,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有助于确定按下了哪个按钮。

+0

这个答案很简洁。 – smwikipedia 2016-12-29 09:02:11