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
È 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
@ 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
[Vedere questo tutorial per ulteriori informazioni] (http://www.tutorialspoint.com/java/java_bitwise_operators_examples.htm) su operatori come "bitwise AND". – Nate