【问题标题】:Make Swing operations immediate立即执行 Swing 操作
【发布时间】:2014-06-18 17:32:23
【问题描述】:

我在 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 信息。我会使用它并上传我所做的任何有用的改进。

【问题讨论】:

标签: java swing time-wait


【解决方案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 条件可能适用于整个计时器

【讨论】:

  • 是的,我最终实施的解决方案与这个非常相似。谢谢。
猜你喜欢
  • 1970-01-01
  • 2014-01-06
  • 1970-01-01
  • 2016-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-03
  • 1970-01-01
相关资源
最近更新 更多