2016-12-14 3 views
1

Я немного новичок в Java, поэтому, извините, если я что-то делаю неправильно. Я хочу, чтобы моя программа сказала The W key has been pressed, когда я нажимаю кнопку W. У меня с этим немного проблем. Вот план моего кода: Java - проблемы с KeyListener

public class Main extends JFrame implements ActionListener, KeyListener { 

    public void keyListener(){ 
     addKeyListener(this); 
     setFocusable(true); 
     setFocusTraversalKeysEnabled(false); 
    } 



    public void keyPressed(KeyEvent e) { 
     int code = e.getKeyCode(); 
     if (code == KeyEvent.VK_W){ 
     System.out.println("W is pressed"); 
     } 
    } 




    @SuppressWarnings("null") 
    public static void main(String[] args) throws InterruptedException { 
    //Initial things like variables and JFrame setup (Like: JFrame frame = new JFrame("FrameDemo");) 
     for(step = 0; step == step; step++){ 
      for(i = 0; i < constructor.length; i++){ 
      //Some code 
      constructor[i].draw(g); 
      } 
     } 
    } 
} 

KeyListener не реагирует вообще. Я думаю, это может быть из-за цикла, но я честно понятия не имею. Может ли кто-нибудь объяснить, почему это происходит и как я могу это исправить?

+2

Не используйте KeyListeners. Использовать привязки клавиш – ControlAltDel

+0

Где вы создаете экземпляр класса 'Main'? Кажется, код здесь отсутствует. – Berger

+0

Этот код не компилируется – ControlAltDel

ответ

0

Дело в том: просто объявить класс, чтобы быть KeyListener ... не магически создать что связи, что требуется во время выполнения.

Иными словами: идея слушателя заключается в том, что в какой-то момент зарегистрирован; и только зарегистрировано Слушатели будут уведомлены о событиях.

Поэтому вам нужно только позвонить

addKeyListener(this) 

где-то в своем классе; например, внутри вашего конструктора.

Или более конкретно: вы создали метод keyListener(), что бы сделать что addKeyListener() звонок ... но: там, вероятно, не призыв к keyListener() в исходном коде!

И только для записи: keyListener() не является хорошим именем для метода; вам лучше назвать его registerListeners(), например.

+0

Спасибо, я исправил его сейчас! –