Используйте Java KeyListener на фоновом кадре

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

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

Спасибо.


person davidcelis    schedule 17.02.2011    source источник


Ответы (2)


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

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

DefaultKeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(dispatcher);

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

person JPelletier    schedule 17.02.2011
comment
Я вижу, что вы делаете с кодом, но я не уверен в хорошем способе непрерывной проверки текущего фокуса клавиатуры в моем основном методе. - person davidcelis; 22.02.2011

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

person Hovercraft Full Of Eels    schedule 17.02.2011