2013-05-07 1 views
8

Dal sito java:Qual è la differenza tra BUTTON1_MASK e BUTTON1_DOWN_MASK?

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

Io non sono nemmeno sicuro di quello che un "modificatore di costante" è. Per non parlare di uno esteso. Capisco tuttavia che BUTTON1_MASK è solo la rappresentazione intera per quando si fa clic sul pulsante sinistro del mouse.

risposta

8

BUTTON1_MASK è la maschera che indica un evento è venuto dal tasto 1. BUTTON1_DOWN_MASK è concettualmente simile, ma è la esteso versione di quel costante.

Ci sono due metodi che restituiscono tali insiemi di costanti: InputEvent#getModifiers() e InputEvent#getModifiersEx(), e torneranno costanti modificatore, o esteso costanti modificatore, rispettivamente.

From the docs (bold is mine):

La maschera tasto restituito da InputEvent.getModifiers() riflette solo il pulsante che ha cambiato stato, non il corrente stato di tutti i pulsanti ... Per ottenere lo stato di tutti tasti e il tasto di modifica , utilizzare InputEvent.getModifiersEx().

and also (bold is mine): modificatori

estese rappresentano lo stato di tutte le chiavi modali, come ALT, CTRL, META, ei pulsanti del mouse appena dopo si è verificato l'evento

Ad esempio, se l'utente preme il pulsante 1 seguito dal pulsante 2 e li rilascia nello stesso ordine, la seguente sequenza di eventi viene generato:

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: 

Se invece si è interessati a rilevare un tasto 1 (normalmente, a sinistra) fare clic su, poi uno di questi dovrebbe funzionare:

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"); 
} 

Inoltre, è possibile controllare questa versione open source di InputEvent, which has some more useful comments, and shows what's happening inside

+0

È passato molto tempo, ma nessuno lo legge: perché nel tuo codice c'è la sola e commerciale? Ad esempio, e.getModifiers() e MouseEvent.BUTTON1_MASK. Quello rappresenta un'intersezione di set? – user2316667

+1

@ user2316667, questo perché 'getModifiers()' e [getModifiersEx()] (http://docs.oracle.com/javase/7/docs/api/java/awt/event/InputEvent.html#getModifiersEx%28 % 29) metodi restituiscono un numero intero, che può contenere una * combinazione * di flag. Per testare qualsiasi ** uno ** flag particolare in un numero intero, si usa l'operatore '&' per vedere se quel particolare bit è diverso da zero (ecco da dove viene il '! = 0'). Quindi, se il bit Button1 è ciò che ti interessa, puoi verificarlo con una maschera come 'e.getModifiers() & BUTTON1_MASK! = 0'. Questo non è l'operatore booleano '&&' ... è qualcosa di diverso. – Nate

+0

[Vedere questo tutorial per ulteriori informazioni] (http://www.tutorialspoint.com/java/java_bitwise_operators_examples.htm) su operatori come "bitwise AND". – Nate

3

Come dichiarano i documenti, BUTTON1_MASK e BUTTON1_DOWN_MASK sono costanti del modificatore, vale a dire che vengono utilizzate insieme a MouseEvent#getModifiers. Essi non sono estesi ma vengono utilizzati come valori della maschera, per esempio

@Override 
public void mousePressed(MouseEvent me) { 
if ((me.getModifiers() & InputEvent.BUTTON1_MASK) == InputEvent.BUTTON1_MASK) { 
     System.out.println("Left button pressed."); 
    } 
} 

BUTTON1_DOWN_MASK è utilizzato per rilevare lo stato del pulsante del mouse mentre il BUTTON1_MASK aiuta semplicemente per determinare quale tasto viene premuto.

+0

Questa risposta è concisa. – smwikipedia