Как проверить, нажата ли и какая кнопка мыши в Swing

Как я могу проверить, нажата ли в данный момент какая-либо кнопка мыши, и если да, то какая?

Дело в том, что мне нужно использовать такую ​​информацию в MouseListener.mouseEntered(). Я проверил MouseEvent, но не смог найти метод, который бы мне помог.

Метод getButton() возвращает значение только в том случае, если состояние кнопок изменилось.

Есть ли способ узнать это, не отслеживая вручную это каким-то образом с помощью MouseListener.mousePressed()/mouseReleased() методов.


person ps-aux    schedule 27.03.2014    source источник
comment
Как можно получить кнопку мыши, когда это событие ввода мыши. Если кнопка нажата, это станет событием перетаскивания мышью. Попробуйте addMouseMotionListener вместо addMouseListener.   -  person Braj    schedule 27.03.2014
comment
@NicolásCarlo getModifiers сообщит вам, какие клавиши были активны, когда произошло событие мыши (это метод InputEvent), getButton сообщит вам, какие кнопки были активны, когда событие было вызвано, но SwingUtilities.isXxxButton — это безопасный межплатформенный механизм, который обычно рекомендуется , чтобы определить, какие кнопки были фактически нажаты   -  person MadProgrammer    schedule 28.03.2014


Ответы (3)


Как я могу проверить, нажата ли в данный момент какая-либо кнопка мыши, и если да, то какая?

Предположительно, вы хотите вызвать определенный код в зависимости от нажатой кнопки, чтобы вы могли сделать что-то вроде:

if (SwingUtilities.isLeftMouseButton(...))
   // do something
person camickr    schedule 27.03.2014

Вы можете начать с изучения Как написать прослушиватель мыши и JavaDocs для MouseEvent, в частности, getButton метод.

Однако необходимо учитывать межплатформенные аспекты, которые перекрываются SwingUtilities.isLeftMouseButton и эквивалентные методы...

person MadProgrammer    schedule 27.03.2014

Это решит вашу проблему

    long eventMask = AWTEvent.MOUSE_MOTION_EVENT_MASK + AWTEvent.MOUSE_EVENT_MASK;

    Toolkit.getDefaultToolkit().addAWTEventListener(new AWTEventListener() {
        public void eventDispatched(AWTEvent e) {
            System.out.println(e.paramString()+"-"+e.getSource());
        }
    }, eventMask);

Это глобальные прослушиватели событий.

Получите источник и кнопку от AWTEvent и делайте все, что хотите.

person Braj    schedule 27.03.2014
comment
Вот одно из значений paramString MOUSE_ENTERED,(470 268),absolute(470 268),button=0,clickCount=0. Теперь мы можем получить тип события мыши, положение мыши, кнопку, а также количество кликов. - person Braj; 28.03.2014
comment
Не говори мне, скажи ОП ;) - person MadProgrammer; 28.03.2014
comment
Это очевидно для ОП, если он / она попробует. Я уже упоминал об этом в своем посте. :) - person Braj; 28.03.2014