Keylistener与timerlistener在同一个类中。

时间:2013-12-14 10:44:02

标签: java awt controls keylistener event-driven

这是我第一次尝试在Java中使用keylistener,所以不要对我很苛刻。我试图在同一个单独的私有类中使用TimerListener和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) { 

    }
}

我做了大量研究,观看了几个在线视频并阅读了有关该主题的oracle文档,但仍然无法理解它。在当前状态下,代码编译,并且计时器按预期运行,但我想我在某个地方错过了一个声明......

我在GameMemory构造函数中尝试了addKeyListener,但它说它找不到符号。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

如果正在调用计时器但键不是,则很可能您没有将侦听器添加为KeyListener。这非常类似于你的代码中发生的事情,因为你在它上面放了一个计时器但是却没有做任何事情。

一般情况下,最好将它们分开来进行分割。每个Java类都应该尝试专注于做一件事并做好。