2013-05-07 1357 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