gpt4 book ai didi

java - 更新 JFrame

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:52:53 26 4
gpt4 key购买 nike

我有一个 JFrame,我想在其上模拟倒计时(如火箭发射)。所以我通过隐藏各种控件 (setVisible(false)) 并显示带有文本的 JLabel 来设置框架(这是应该倒计时的文本:3, 2, 1, 开始)。

JLabel 上的文本从“3”开始。我的意图是简单地让程序的执行等待 1 秒钟,然后将文本更改为“2”,再等一秒钟,更改为“1”等)。最后,我隐藏了 JLabel 并重新显示所有控件,一切都正常进行。

我正在做的是行不通的。它似乎在等待正确的时间,完成后,我的 JFrame 看起来很棒并且可以按预期工作。但是在 countdown 方法的 4 秒内,我看到的只是一个白色的 JFrame。不是我想要的 3、2、1。

这是我的代码。谁能看到我做错了什么?谢谢!

public void countdown() {
long t0, t1;

myTest.hideTestButtons(true);
myTest.repaint();

t0 = System.currentTimeMillis();
do {
t1 = System.currentTimeMillis();
} while ( (t1 - t0) < 1000);

myTest.TwoSeconds();
myTest.repaint();
t0 = System.currentTimeMillis();
do {
t1 = System.currentTimeMillis();
} while ( (t1 - t0) < 1000);


myTest.OneSecond();
myTest.repaint();
t0 = System.currentTimeMillis();
do {
t1 = System.currentTimeMillis();
} while ( (t1 - t0) < 1000);


myTest.Go();
myTest.repaint();
t0 = System.currentTimeMillis();
do {
t1 = System.currentTimeMillis();
} while ( (t1 - t0) < 1000);

myTest.hideTestButtons(false);
myTest.repaint();
}

public void TwoSeconds() {
lblCountdown.setText("2");
}

public void OneSecond() {
lblCountdown.setText("1");
}

public void Go() {
lblCountdown.setText("Go!");
}

最佳答案

您需要使用 javax.swing.Timer为您的应用程序计时。

发生的事情是您在一个线程上运行所有内容 - 因此 UI(在单独的线程上运行)没有机会更新。

如果您想了解其工作原理的示例,可以查看此答案:https://stackoverflow.com/a/1006640/1515592

关于java - 更新 JFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12020627/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com