0

我在 Swing 中有一个方法可以隐藏和显示一些按钮,称为setScreen(int stage),它将根据stage参数隐藏或不隐藏某些按钮。我想调用该方法,然后等待几秒钟,然后再次调用它,就像在这段代码中一样:

... //Here stage has been assigned to some value

setScreen(stage);

if (stage != STAGE_TWO) {
  sleep(WAIT_TIME * 1000);
  stage = WELCOME;
  setScreen(stage);
}

的代码setScreen(int stage)是这样的:

void setScreen(int stage) {
    switch (stage) {
        case WELCOME:
            screen.infoLabel.setText("Welcome!");
            screen.startButton.setVisible(true);
            break;

        case STAGE_TWO:
            screen.infoLabel.setText("We are in stage two!");
            screen.startButton.setVisible(false);
            break;
    }

    screen.validate();
}

其中 screen 是扩展 JFrame 的类的实例化。

这里的问题是第一个setScreen(stage)永远不会显示,因为线程在提交更改之前进入睡眠状态。我曾尝试将 sleep 替换为 while 循环检查系统的时间,但效果是一样的。

**编辑:** 我在推荐的 StackOverflow 线程中发现了一些可能有用的 Swing Timer 信息。我将使用它并上传我所做的任何有用的进步。

4

1 回答 1

1

您正在休眠事件调度线程。不要这样做并使用:

javax.swing.Timer timer = new javax.swing.Timer(WAIT_TIME * 1000, new ActionListener()
{
    public void actionPerformed(ActionEvent e)
    {
        if (stage != STAGE_TWO) {
            stage = WELCOME;
            setScreen(stage);
        }
    }
});
timer.start();

根据您的要求,if 条件可能适用于整个计时器

于 2014-06-19T04:57:25.113 回答