2013-12-14 1 views
1

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

public class GameMemory { 
    private int[][] grid = new int[24][12]; 
    Figure figure = new Figure(); 

    GameMemory() { 
     figure.figureReinitialize(); 
     Timer timer = new Timer(1000, new TimerListener()); 
     timer.start(); 
    } 

И частный класс

private class TimerListener implements ActionListener, KeyListener { 
    @Override 
    public void actionPerformed(ActionEvent e) { 
     figure.moveDown(); 
     System.out.println(Arrays.deepToString(grid)); // To debug. 
    } 

    @Override 
    public void keyPressed(KeyEvent e) { 
     if (e.getKeyCode() == KeyEvent.VK_RIGHT) 
      GameMemory.this.figure.rotateRight(); 
    } 

    @Override 
    public void keyReleased(KeyEvent e) { 

    } 

    @Override 
    public void keyTyped(KeyEvent e) { 

    } 
} 

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

Я пробовал addKeyListener в конструкторе GameMemory, но он сказал, что не может найти символ.

Любые идеи?

+1

Чтобы лучше помочь, опубликуйте [SSCCE] (http://sscce.org/). –

ответ

0

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

В общем, было бы лучше разделить их в любом случае. Каждый Java-класс должен попытаться сосредоточиться на том, чтобы делать одно и делать это хорошо.

+0

Вы не добавляете 'keyListener' в' timer', 'timer' не делаете ничего с ключами. Вам нужно добавить его в любой менеджер ввода/объект/все, что генерирует ключевые события. –

+0

Это еще одна важная причина не объединять два интерфейса в один объект - это сделает такие вещи очевидными. –