2011-04-01 2 views
6

Я обрабатываю некоторый MouseEvent в приложении GUI с использованием Java Swing.Обнаружение модификаторов Shift на MouseEvent, сгенерированных с помощью нажатия клавиши в 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 
    } 

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

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

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

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

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

ответ

10

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

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

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

+0

вы правы. В любом случае ваш код (me.getModifiers() & InputEvent.BUTTON1_DOWN_MASK) не возвращает boolean – Heisenbug

+0

Извините, вы правы. Теперь исправлено. –

+0

извините. Я немного смущен. Кажется, работает точно в обратном порядке: (me.getModifiers() & InputEvent.BUTTON1_DOWN_MASK) == 0. Во всяком случае ... Вы поняли. спасибо – Heisenbug

0

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

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

или

if ((me.getModifiers() & InputEvent.BUTTON1_MASK) != 0) 
Смежные вопросы