Как добавить прослушиватель событий глобального действия? - PullRequest
4 голосов
/ 13 октября 2011

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

Toolkit.getDefaultToolkit ().addAWTEventListener (this, AWTEvent.ACTION_EVENT_MASK); 

, но это не работает.

Ответы [ 3 ]

3 голосов
/ 13 декабря 2011

Глобальное прослушивание событий Action не работает для таких компонентов Swing, как JButtons, поскольку они напрямую вызывают своих слушателей, а не отправляют событие через очередь событий AWT. Ошибка Java 6292132 описывает эту проблему.

К сожалению, я не знаю обходного пути, кроме регистрации слушателя для каждого компонента.

3 голосов
/ 13 октября 2011

(пример) для прослушивания всех MouseEvents и KeyEvents в приложении, которое вы можете использовать:

long eventMask = AWTEvent.MOUSE_MOTION_EVENT_MASK
    + AWTEvent.MOUSE_EVENT_MASK
    + AWTEvent.KEY_EVENT_MASK;

Toolkit.getDefaultToolkit().addAWTEventListener( new AWTEventListener()
{
    public void eventDispatched(AWTEvent e)
    {
        System.out.println(e.getID());
    }
}, eventMask);

Поскольку этот код выполняется в потоке диспетчеризации событий, вам необходимо убедиться, что он выполняется быстро, чтобыGUI становится неотзывчивым.Вышеупомянутый подход используется здесь , если вы хотите посмотреть на рабочий пример.

Смотрите здесь для получения дополнительной информации: Глобальные слушатели событий

Иэто для подробного изучения: AWT Event Listener

1 голос
/ 07 марта 2016

В java swing есть Global Event Dispatcher, который вы можете использовать. По сути, он перехватывает событие, выполняет пользовательскую логику и отправляет ее фактическому компоненту. Например, если вы хотите перехватить событие щелчка мыши -

EventQueue eventQueue = java.awt.Toolkit.getDefaultToolkit().getSystemEventQueue();
    eventQueue.push(new EventQueue()
    {
        @Override
        public void dispatchEvent(java.awt.AWTEvent awtEvent)
        {
            if((awtEvent instanceof MouseEvent && awtEvent.getID() == MouseEvent.MOUSE_CLICKED)
            {
                // do your custom logic here
            }
        }
    super.dispatchEvent(awtEvent);
    });

Подробнее об этом можно прочитать здесь - Диспетчеры событий

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...