加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java Swing:延迟后更改文本

发布时间:2020-12-15 08:48:34 所属栏目:Java 来源:网络整理
导读:基本上,我有这个游戏,一旦猜到正确答案,它开始一个新单词的新游戏.我想显示正确!但三秒后,将其更改为空字符串.我怎么做? 我的尝试: if (anagram.isCorrect(userInput.getText())) { anagram = new Anagram(); answer.setText("CORRECT!"); word.setText(a
基本上,我有这个游戏,一旦猜到正确答案,它开始一个新单词的新游戏.我想显示正确!但三秒后,将其更改为空字符串.我怎么做?

我的尝试:

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是一个事件驱动的环境.阻止事件调度线程时,不能处理任何新事件.

您永远不应该在任何耗时的过程中阻止EDT(例如I / O,循环或线程#sleep).

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

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

其好处是actionPerformed方法是使用Event Dispatching Thread的上下文执行的.

有关示例,请查看this或this或this或this

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读