Java 我的秋千游戏倒计时解决方案。(卡片布局)

Java 我的秋千游戏倒计时解决方案。(卡片布局),java,swing,events,timer,layout-manager,Java,Swing,Events,Timer,Layout Manager,我正在制作一个摇摆迷宫游戏,我使用卡片布局在游戏中从一个面板转到另一个面板(主菜单-->选择难度屏幕-->游戏屏幕)。 我已经设置好了游戏和菜单,现在我正在尝试添加一个倒计时时钟,让用户知道在游戏结束前他还有X秒 我制作了一个倒计时程序,它适用于1个贴图(1个面板),但当我尝试将其用于其他面板(我的其他2个贴图)时,它非常适合。它真的变得很糟糕。计时器在达到0(选项窗格和嘟嘟声)后不会停止其操作。 因此,当我将TimerEvent和TimerClass类链接到我的GUI(我在这里发布的其他GUI

我正在制作一个摇摆迷宫游戏,我使用卡片布局在游戏中从一个面板转到另一个面板(主菜单-->选择难度屏幕-->游戏屏幕)。
我已经设置好了游戏和菜单,现在我正在尝试添加一个倒计时时钟,让用户知道在游戏结束前他还有X秒


我制作了一个倒计时程序,它适用于1个贴图(1个面板),但当我尝试将其用于其他面板(我的其他2个贴图)时,它非常适合。它真的变得很糟糕。计时器在达到0(选项窗格和嘟嘟声)后不会停止其操作。 因此,当我将TimerEvent和TimerClass类链接到我的GUI(我在这里发布的其他GUI,但在这里发布的很多行)时,它们确实可以工作。但当我尝试在其他面板上添加更多计时器时(在我的游戏之间的不同关卡),它会变得很糟糕。 很抱歉我的英语不好,非常感谢你

真诚地说,一个初学者程序员

菜单类(非常简短和基本的版本,我为您做了测试): 我的timerEvent类(稍作更改,看起来适合上面的类) 我的TimerClass:
为什么不这样做:

int counter;
for (int j = 0 ; j >=counter ; j++) {
   Card.timerLabel.setText("Time:" + counter);
   delayer (1000);
}

private static void delayer (long milliseconds)
{
    try {
        Thread.sleep (1000);
    }

    catch (InterruptedException ex){
    }
}

我在webz上读到,我必须小心使用线程,最好使用swing定时器:s,但我会试试你的,如果它有效……那么它就有效了。我会让你知道的
public class TimerEvent implements ActionListener {
static TimerEvent e = new TimerEvent();
    public void actionPerformed(ActionEvent e){
        int count = 60;
        Card.timerLabel.setText("Time: " + count);

        TimerClass tc = new TimerClass(count);
        Card.timer = new Timer(1000, tc);
        Card.timer.start();
    }
}
public class TimerClass implements ActionListener {

int counter;

public TimerClass(int counter) {
    this.counter = counter;

}

public void actionPerformed(ActionEvent tc) {
    counter--;

    if (counter >= 1) {
        Card.timerLabel.setText("Time:" + counter);
    } else {
        Card.timer.stop();
        Card.timerLabel.setText("Done");
        Toolkit.getDefaultToolkit().beep();
        JOptionPane.showMessageDialog(MainMenu.panelCont, "Time expired, game over");
        Card.cl.show(MainMenu.panelCont, "2");
        Card.timer.stop();

    }
}
}
int counter;
for (int j = 0 ; j >=counter ; j++) {
   Card.timerLabel.setText("Time:" + counter);
   delayer (1000);
}

private static void delayer (long milliseconds)
{
    try {
        Thread.sleep (1000);
    }

    catch (InterruptedException ex){
    }
}