2015-08-20 2 views
0

У меня есть JFrame с несколькими компонентами на нем, и я не могу получить событие KeyPressed из JFrame, потому что кадр никогда не фокусируется, и событие работает только тогда, когда оно сфокусировано. Как я должен сделать подобное событие, но только если он работает, когда окно сосредоточено, а не только отдельный компонент?Java/Swing - Создание горячих клавиш

+2

Посмотрите на [Как использовать привязки клавиш] (http://docs.oracle.com/javase/tutorial/uiswing/misc/keybinding.html) – MadProgrammer

+0

@AndrewThompson Это ответ, но это будет ответ только на ссылку, так что :(- но да, это может быть хорошая причина, потому что ничего не ответит на вопрос. – MadProgrammer

+2

Я голосую, чтобы закрыть этот вопрос как не относящийся к теме, потому что на вопрос лучше всего ответить, читая [Как использовать привязки клавиш] (http://docs.oracle.com/javase/tutorial/uiswing/misc/keybinding.html) учебник – MadProgrammer

ответ

0

Я нашел тему на этом сайте, которая делает это чрезвычайно легко, без необходимости связывания клавиш или чего-то еще. Все это, это переопределенный метод dispatchKeyEvent; Я не знаю, если это лучший способ сделать это, но это работает для меня

Вот ссылка на нить How can I listen for key presses (within Java Swing) across all components?

KeyboardFocusManager.getCurrentKeyboardFocusManager() 
    .addKeyEventDispatcher(new KeyEventDispatcher() { 
     @Override 
     public boolean dispatchKeyEvent(KeyEvent e) { 
      System.out.println("Got key event!"); 
      return false; 
     } 
    }); 
0

Проще всего было бы разместить JPanel в JFrame, затем сделайте все, используя JPanel вместо JFrame.