Используйте Java KeyListener на фоновом фрейме - PullRequest
1 голос
/ 17 февраля 2011

У меня есть панель содержимого, содержащая JScrollPane, обернутую вокруг нередактируемой области JTextArea, которую я использую для (прямо сейчас) простого отображения информации о том, какая клавиша нажимается (просто пыталась заставить работать этот KeyListener).

KeyListener находится на JTextArea, и все отлично работает, когда выбран кадр.Однако я бы хотел, чтобы нажатия клавиш регистрировались, даже если выбрано другое окно.Есть ли способ сделать это?

Спасибо.

Ответы [ 2 ]

3 голосов
/ 17 февраля 2011

Я делал это в прошлом, но не помню точно, как.Я думаю, что это было похоже на это:

KeyEventDispatcher dispatcher = new KeyEventDispatcher()
{
    public boolean dispatchKeyEvent(KeyEvent e)
    {
        System.out.println(e.getKeyChar());
        return false;
    }
};

DefaultKeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(dispatcher);

Просто измените SysOut с вашим собственным кодом.Если вы хотите предотвратить отправку события, метод должен возвратить true вместо false.Я также нашел этот вопрос , который может решить вашу проблему.

0 голосов
/ 17 февраля 2011

Обдумайте использование привязок клавиш , если вам нужно прослушивать клавиши, когда компонент, который выполняет прослушивание, не имеет фокуса. Если, с другой стороны, вы пытаетесь слушать клавиши, когда другое приложение находится в фокусе, тогда лучше всего не использовать для этого Java, а использовать язык программирования, который позволяет вам приблизиться к ОС, такой как C или C ++.

...