Java не улавливает нажатия клавиш?

У меня есть программа, которая создает JFrame, а затем JPanel поверх нее. Для программы я попытался реализовать KeyListener, а затем добавить методы (для обоих компонентов), но программа не улавливает ни одного из моих нажатий клавиш. Что я делаю не так?

ИЗМЕНИТЬ

Это мой код. Это часть класса, который создает JFrame. Он по-прежнему не реагирует на нажатие клавиши ESC.

@Override
public void keyTyped(KeyEvent e) {

}

@Override
public void keyPressed(KeyEvent e) {
    int keyCode = e.getKeyCode();

    if(keyCode == KeyEvent.VK_ESCAPE){
        System.out.println("Hi");

    }else{
        System.out.println("Hello");

    }

}

@Override
public void keyReleased(KeyEvent e) {

}

person user1546859    schedule 28.03.2013    source источник
comment
без кода нельзя сказать   -  person Zavior    schedule 28.03.2013
comment
Компонент с прослушивателем ключей должен иметь фокус...   -  person Markus Kreth    schedule 28.03.2013
comment
Вы уверены, что событие не вызывается?   -  person 0x6C38    schedule 28.03.2013
comment
вы пытаетесь поймать событие, соответствующее клавише TAB?   -  person A human being    schedule 28.03.2013
comment
@MarkusKreth Как бы вы установили фокус JFrame?   -  person user1546859    schedule 29.03.2013


Ответы (1)


Без вашего кода все, что я могу вам сказать, это то, что обычно, когда люди спрашивают об этом, они не знают, что интерфейс KeyListener содержит три метода, как утверждает Agusti-N в их ответ здесь:

void keyTyped(KeyEvent)
void keyPressed(KeyEvent)
void keyReleased(KeyEvent)

Если вы используете keyTyped и используете event.getKeyCode() для проверки введенного символа, это не сработает. Вы должны использовать getKeyChar() для keyTyped и getKeyCode() для keyPressed и keyReleased. В противном случае вы получите null. Вы должны использовать это, только если у вас нет другой альтернативы, в большинстве случаев вы хотите использовать Привязки клавиш.

person 0x6C38    schedule 28.03.2013
comment
Ах, никогда не знал об этой разнице между code и character в этом контексте. - person asgs; 29.03.2013
comment
Кроме того, вы могли забыть зарегистрировать KeyListener в JPanel. Используйте panel.addKeyListener(слушатель). - person Nathan; 29.03.2013
comment
@Mr D, вы ссылались на часть KeyEvent Javadoc, в котором говорится, что для событий KEY_TYPED код ключа равен VK_UNDEFINED. - person asgs; 29.03.2013
comment
Да, на самом деле я узнал об этом недавно, когда работал над каким-то проектом javafx, и я прочитал совет NetBeans для него. - person 0x6C38; 29.03.2013