2011-04-01 7 views
6

Obsługuję niektóre MouseEvent w aplikacji GUI za pomocą Java Swing.Wykrywanie modyfikatorów Shift na MouseEvent generowanych po kliknięciu swing

Od tego czasu analizowałem zdarzenia myszy za pomocą metody mousePressed, aby stwierdzić, czy nastąpiło kliknięcie lewym lub prawym przyciskiem myszy: .

Mój kod to:

public void mousePressed(MouseEvent me) { 
    if (me.getModifiers == InputEvent.BUTTON1_DOWN_MASK){ 
    //left click 
    }else if (me.getModifiers == InputEvent.BUTTON3_DOWN_MASK){ 
    //right click 
    } 

Teraz moja aplikacja staje się coraz bardziej skomplikowane i trzeba również sprawdzić, czy został naciśnięty przycisk SHIFT podczas gdy mysz lewym przyciskiem myszy. chciałbym zrobić coś takiego:

public void mousePressed(MouseEvent me) { 
    if (me.getModifiers == InputEvent.BUTTON1_DOWN_MASK && me.isShiftDown()){ 
    //left click 
    } 

Teraz to nie działa. W szczególności jeśli kliknę lewy przycisk, przytrzymując SHIFT, to SHiftDown zwróci true (prawidłowość, której się spodziewałem), ale teraz wydaje się, że modyfikatory również zostały zmienione, a porównanie z BUTTON1_DOWN_MASK zakończyło się niepowodzeniem.

me.getModifiers == InputEvent.BUTTON1_DOWN_MASK //failed..modifiers are changed 

Co robię źle? Jak mogę naprawić swój kod?

Odpowiedz

10

Należy zauważyć, że metoda nazywa się getModifier_s_(), z "s", ponieważ może zwrócić więcej niż jeden modyfikator, połączony za pomocą bitowego "lub". To nigdy technicznie poprawny używać „==”: należy użyć bitowe „&”, tak:

if ((me.getModifiers() & InputEvent.BUTTON1_DOWN_MASK) != 0) ... 

Pokochasz więc odpowiedzi na ten jeden modyfikator, nawet jeśli inni są obecne.

+0

masz rację. W każdym razie twój kod (me.getModifiers() i InputEvent.BUTTON1_DOWN_MASK) nie zwraca boolean – Heisenbug

+0

Przepraszam, masz rację. Teraz naprawiony. –

+0

Przepraszam. Jestem nieco zdezorientowany. Wydaje się działać dokładnie odwrotnie: (me.getModifiers() i InputEvent.BUTTON1_DOWN_MASK) == 0. W każdym razie ... masz rację. dzięki – Heisenbug

0

Należy użyć

if ((me.getModifiersEx() & InputEvent.BUTTON1_DOWN_MASK) != 0) 

lub

if ((me.getModifiers() & InputEvent.BUTTON1_MASK) != 0)