Есть ли способ получить события клавиатуры без JFrame? - PullRequest
2 голосов
/ 05 января 2011

Я хочу, чтобы моя программа показывала главное окно, когда пользователь нажимает на ярлык. Есть ли способ получить события глобального ключа, не только те, которые произошли, когда фокус был внутри фрейма приложения?

Ответы [ 2 ]

4 голосов
/ 06 января 2011

Это может делать то, что вы хотите.Обратите внимание, что этот код проверяет нажатие клавиши Ctr-F.Я использую этот код, чтобы открыть диалог поиска из чего-либо в приложении.Я уверен, что приложение должно иметь фокус, хотя.Что-то попробовать по крайней мере ...

AWTEventListener listener = new AWTEventListener() {
  @Override
  public void eventDispatched(AWTEvent event) {
    try {
      KeyEvent evt = (KeyEvent)event;
      if(evt.getID() == KeyEvent.KEY_PRESSED && evt.getModifiers() == KeyEvent.CTRL_MASK && evt.getKeyCode() == KeyEvent.VK_F) {

      }
    }
    catch(Exception e) {
      e.printStackTrace();
    }
  }
};

            Toolkit.getDefaultToolkit().addAWTEventListener(listener, AWTEvent.KEY_EVENT_MASK);

РЕДАКТИРОВАТЬ: Я думаю, что я понимаю, что вы хотите.В основном, когда приложение не имеет фокуса.Если это так, то вам, вероятно, придется подключаться к событиям ОС с помощью нативного API (JNI), но это вынуждает вас работать с конкретной ОС ...

3 голосов
/ 06 января 2011

Это может быть полезно.Я не уверен, есть ли одна библиотека, которая будет работать для Windows / Linux / Mac.Для Windows вам понадобится некоторая внешняя библиотека, которая использует собственный код для создания клавиатуры.Я понятия не имею, как это сделать на других ОС.

...