Не отвечает KeyListener для JFrame - PullRequest
76 голосов
/ 13 ноября 2008

Я пытаюсь реализовать KeyListener для моего JFrame. На конструкторе я использую этот код:

System.out.println("test");
addKeyListener(new KeyListener() {
    public void keyPressed(KeyEvent e) { System.out.println( "tester"); }

    public void keyReleased(KeyEvent e) { System.out.println("2test2"); }

    public void keyTyped(KeyEvent e) { System.out.println("3test3"); }
});

Когда я запускаю его, в моей консоли появляется сообщение test. Однако, когда я нажимаю клавишу, я не получаю никаких других сообщений, как будто KeyListener даже не было.

Я думал, что это может быть потому, что фокус не на JFrame
и поэтому они KeyListener не получают никаких событий. Но я уверен, что это так.

Есть что-то, чего мне не хватает?

Ответы [ 12 ]

0 голосов
/ 10 ноября 2012

У вас могут быть пользовательские JComponents, устанавливающие их родительский JFrame фокусируемым.

Просто добавьте конструктор и передайте JFrame. Затем сделайте вызов setFocusable () в paintComponent.

Таким образом, JFrame всегда будет получать KeyEvents независимо от того, нажаты ли другие компоненты.

0 голосов
/ 10 июля 2012

LOL .... все, что вам нужно сделать, это убедиться, что

addKeyListener (это);

правильно указан в вашем коде.

...