Обнаружение модификаторов Shift на MouseEvent, сгенерированных от щелчка в колебании - PullRequest
7 голосов
/ 01 апреля 2011

Я обрабатываю MouseEvent в приложении с графическим интерфейсом, используя Java Swing.

Так как теперь я анализировал события мыши внутри метода mousePressed, только чтобы определить, произошел щелчок влево или вправо.

Мой код был:

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

Теперь мое приложение становится все более сложным, и мне нужно также проверить, была ли нажата кнопка Shift при щелчке левой кнопкой мыши. Я хотел бы сделать что-то вроде этого:

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

Теперь это не работает. В частности, если я нажму левую кнопку, удерживая SHIFT, isShiftDown вернет true (точно. Я ожидал этого), но теперь кажется, что модификаторы также изменены, и сравнение с BUTTON1_DOWN_MASK не выполняется.

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

Что я делаю не так? Как я могу исправить свой код?

Ответы [ 2 ]

10 голосов
/ 01 апреля 2011

Обратите внимание, что метод называется getModifier_s_ (), с "s", потому что он может возвращать более одного модификатора, объединенного с использованием побитового "или".Технически никогда не правильно использовать «==»: вы должны использовать побитовое «&», например:

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

, тогда вы ответите на этот один модификатор, даже если присутствуют другие.

0 голосов
/ 11 октября 2016

Вы должны использовать

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

или

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