gpt4 book ai didi

Java Swing : Change Text after delay

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:29:49 24 4
gpt4 key购买 nike

基本上,我有这个游戏,一旦猜到正确答案,它就会用一个新单词开始一个新游戏。我想显示 Correct! 但三秒钟后,将其更改为空字符串。我该怎么做?

我的尝试:

if (anagram.isCorrect(userInput.getText()))
{

anagram = new Anagram();
answer.setText("CORRECT!");
word.setText(anagram.getRandomScrambledWord());
this.repaint();
try
{
Thread.currentThread().sleep(3000);
}
catch (Exception e)
{
}
answer.setText("");

} else
{
answer.setForeground(Color.pink);
answer.setText("INCORRECT!");
}

编辑:

我的解决方案:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt)
{
// TODO add your handling code here:
if (anagram.isCorrect(userInput.getText()))
{
answer.setText("CORRECT!");

ActionListener taskPerformer = new ActionListener()
{
public void actionPerformed(ActionEvent evt)
{
anagram = new Anagram();
word.setText(anagram.getRandomScrambledWord());
answer.setText("");
userInput.setText("");
}
};
Timer timer = new Timer(3000, taskPerformer);
timer.setRepeats(false);
timer.start();
} else
{
answer.setForeground(Color.pink);
answer.setText("INCORRECT!");
}
}

我不确定,但我希望我听从了 MadProgrammer 的建议,而不是阻塞事件本身,而是阻塞新线程。我也会查找 Java Timer。

最佳答案

Swing 是一个事件驱动的环境。当您阻塞事件调度线程时,无法处理任何新事件。

您永远不应该用任何耗时的进程(例如 I/O、循环或 Thread#sleep)阻塞 EDT。

您可能希望阅读 The Event Dispatch Thread获取更多信息。

相反,您应该使用 javax.swing.Timer。它将在给定延迟后触发 ActionListener

这样做的好处是 actionPerformed 方法是在事件调度线程的上下文中执行的。

查看 thisthisthisthis举个例子

关于Java Swing : Change Text after delay,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13812205/

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