2013-03-28 4 views
0

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

EDIT

Это мой код. Это часть класса, который создает 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) { 

} 
+4

без кода, нельзя сказать – Zavior

+1

Компонент с ключом должен иметь фокус ... –

+1

Вы уверены, что событие не получило вызов? –

ответ

3

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

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

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

+1

Ах, никогда не знал об этой разнице между «кодом» и «символом» в этом контексте. – asgs

+0

Также вы можете забыть зарегистрировать KeyListener с помощью JPanel. Используйте panel.addKeyListener (слушатель). – Nathan

+0

@Mr D Вы ссылались на часть ['KeyEvent' Javadoc] (http://docs.oracle.com/javase/7/docs/api/java/awt/event/KeyEvent.html#getKeyChar()), в котором говорится: «Для событий KEY_TYPED ключевой код - VK_UNDEFINED». – asgs

Смежные вопросы