2014-12-03 5 views
0

Я хочу, чтобы пользователь мог получать ввод с клавиатуры пользователем, но я добавил все, что, как я думал, позволит моей программе сделать это, и все равно это не сработает. Что я делаю не так?KeyListener не работает в Java

class KeyInput implements KeyListener { 
    public void keyPressed(KeyEvent e) { 
     System.out.println("keyPressed"); 
    } 
    public void keyReleased(KeyEvent e) { 
     System.out.println("keyReleased"); 
    } 
    public void keyTyped(KeyEvent e) { 
     System.out.println("keyTyped"); 
    }  
} 

public GameView() { 
    this.addKeyListener(new KeyInput()); 
} 

Конструктор отлично работает, а KeyInput является внутренним классом объекта GameView. При запуске игры, если я нажимаю клавишу, на выходе системы ничего не печатается. Я что-то упустил? Благодаря!

+0

О, я посмотрел на другом коде народов и найдено Мне нужно добавить: this.setFocusable (true); this.requestFocusInWindow(); – Mayron

+0

Он не сказал мне этого в книге, которую я использовал, спасибо в любом случае извините ^^ – Mayron

+1

Опубликуйте ответ, чтобы объяснить это решение вместо комментария. Затем вы можете пометить свой вопрос как разрешенный. – mcoolive

ответ

3

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

Как правило, вы хотите, чтобы избежать использования его и использовать ключ привязки API вместо How to Use Key Bindings, но это будет зависеть от того, должны ли вы использовать чистый API, AWT или нет ....