【问题标题】:How can I apply an actionlistener to my timer?如何将 actionlistener 应用于我的计时器?
【发布时间】:2012-11-26 20:02:56
【问题描述】:

我正在尝试将 actionlistener 链接到我正在编写的游戏的计时器。每当计时器触发时,2D 阵列中的怪物会随机移动到相邻的一块。阵法中并没有完全布满怪物。没有怪物的地方,我的数组是空的。

这是我目前所拥有的:

private class MonsterListener implements ActionListener {
    public void actionPerformed(ActionEvent e) {
        for (int i = 0; i < Level.SIZE; i++) {
            for (int j = 0; j < Level.SIZE; j++) {
                if (monsters[i][j] != null) {
                    monsters[i][j].update();
                }
            }
        }
        updateState();
    }
}

在我的 Monster 类中:

public void update() {
        rand1 = new Random();
        rand2 = new Random();
        drow = rand1.nextInt(3); //random int 0,1,2
        dcol = rand2.nextInt(3); //random int 0,1,2
        drow -= 1; //random int -1,0,1
        dcol -= 1; //random int -1,0,1

        row += drow;
        col += dcol;
    }   

当我创建计时器时,我会这样做

public final int DELAY = 1000;
Timer myTimer = new Timer(DELAY, new MonsterListener());

但是,我不断收到一个错误,显示为

cannot find symbol
symbol  : constructor Timer(int,Game.MonsterListener)
location: class java.util.Timer
    myTimer = new Timer(DELAY, listener);
                      ^

【问题讨论】:

    标签: java timer actionlistener


    【解决方案1】:

    我认为您需要使用javax.swing.Timer 而不是java.util.Timer

    [我怀疑这是因为您使用的是ActionListener]

    【讨论】:

    • 我相信你是对的!关于这个主题的另一个问题。有没有办法从同一个项目的另一个类访问这个计时器?我希望每次触发此计时器时我的 GUI 都会更新,但计时器不在我更新 GUI 的面板类中,所以在我的面板类中有什么方法可以说“当计时器触发时,执行此操作...”?
    • 我不确定我是否完全了解您的项目组织。但是,如果您想为面板的每个实例关联一个计时器,您可以在面板的构造函数中创建并设置一个计时器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-30
    相关资源
    最近更新 更多