Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在同一类中具有timerlistener的Keylistener。_Java_Awt_Controls_Keylistener_Event Driven - Fatal编程技术网

Java 在同一类中具有timerlistener的Keylistener。

Java 在同一类中具有timerlistener的Keylistener。,java,awt,controls,keylistener,event-driven,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.figureReinitia

这是我第一次尝试在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,但它说找不到符号


有什么想法吗

如果正在调用计时器,但没有调用键,则很可能您没有将侦听器添加为KeyListener。这很像代码中正在发生的事情,因为您在代码中设置了计时器,但随后对其不做任何其他操作


但总的来说,最好还是把它们分开。每个Java类都应该试着专注于做一件事并把它做好。

要想更快地获得更好的帮助,请发布一条消息。你不需要在
计时器
中添加
键侦听器
计时器
,不要对键做任何事情。您需要将它添加到生成关键事件的任何输入管理器/对象/任何对象中。这是另一个不将两个接口合并到一个对象中的好理由-这将使类似的事情变得显而易见。