Не удается отфильтровать MouseEvent.MOUSE_CLICKED в AWT EventQueue

Мне нужно в моей собственной AWT EventQueue фильтровать двойные щелчки мыши, поэтому я делаю:

public class AppEventQueue extends EventQueue
{
@Override
protected void dispatchEvent(AWTEvent event)
{
    super.dispatchEvent(event);
    if(event instanceof MouseEvent)
    {
        MouseEvent mouseEvent = (MouseEvent) event;
        if(mouseEvent.getModifiers() == MouseEvent.MOUSE_CLICKED)
        {
            //do something
        }
    }
}
}

У меня проблема в том, что похоже, что щелчок мышью генерирует значение int 16, MouseEvent.MOUSE_CLICKED имеет значение 500. Я что-то упустил?


person 1ac0    schedule 20.03.2013    source источник


Ответы (1)


вы хотите проверить идентификатор:

if (mouseEvent.getID() == MouseEvent.MOUSE_CLICKED {

}
person kleopatra    schedule 20.03.2013
comment
работа, спасибо. не понимаю, почему codemouseEvent.getID() == MouseEvent.MOUSE_CLICKEDcode генерирует 2 события: кнопка нажата и кнопка отпущена, я думаю, что на данный момент это очень низкий уровень, и если бы я проверил двойной щелчок, мне нужно реализовать свой собственный таймер и проверьте, происходит ли второй щелчок в определенном временном окне. - person 1ac0; 20.03.2013
comment
хм... что ты имеешь в виду? Нажатие определяется как срабатывание после выполнения нажатия без перемещения. Так что да, если вы прослушиваете нажатие/выпуск где-то еще, вы получите два события (см. API-документ MouseEvent) - person kleopatra; 20.03.2013
comment
если я реализую в приложении mouselistener, я могу проверить наличие mouseClicked (MouseEvent e), mousePressed (MouseEvent e) и mouseReleased (MouseEvent e). mouseClicked(MouseEvent e) — это левая кнопка, которую можно нажать и отпустить в определенное время. - person 1ac0; 20.03.2013