当前位置: 首页 > 面试题库 >

Java Swing:延迟后更改文本

端木宏盛
2023-03-14
问题内容

基本上,我有这个游戏,一旦猜出正确答案,它就会以一个新单词开始一个新游戏。我想显示,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。


问题答案:

摇摆是事件驱动的环境。当您阻止事件调度线程时,无法处理任何新事件。

您切勿在任何耗时的过程(例如I / O,循环等)中阻塞EDT Thread#sleep

您可能希望通读事件分发线程以获取更多信息。

相反,您应该使用javax.swing.TimerActionListener给定延迟后,它将触发一个。

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

查看这个或这个或这个或这个示例



 类似资料:
  • 问题内容: 我创建了基于 HTML: JS: 如您所见,我尝试通过2种方式在3秒后更改为,但没有人为我工作。真的很奇怪 我错过了什么? 实际上,我尝试在从Ajax获得响应后更改值,但是假设应该是相同的问题。 谢谢, 这是我的示例:http : //jsfiddle.net/6uKAT/20/ 问题答案: 尝试使用: Angular的window.setTimeout包装。fn函数包装在try /

  • 问题内容: 我试图 建立一个解释器,所以我想知道如何 实时更改文本的颜色。例如,我在文本字段中输入的单词是: 几秒钟后,单词变成绿色。 可能吗? 问题答案: package test;

  • 问题内容: 我有创建的这种方法,每秒向我的andengine场景添加一个精灵。 例如,我想做的是 我遇到的问题是更改变量时。我想不通一种更新TimeHandler的方法,让它知道更改mEffectSpawnDelay变量。 有什么建议? 问题答案: 我刚刚为您创建了此类。我认为它应该起作用,并且您可以根据需要更改刻度之间的间隔。(尚未测试,因此您可能需要进行一些小的修复。但这在IMO上看起来还不错

  • 问题内容: 我需要在循环中对数据库进行SQL查询: 更好的方法是:保持原样或循环后移动: 或者是其他东西 ? 问题答案: 整个要点是直到函数返回才执行,因此将其放置在要关闭的资源打开后的适当位置。但是,由于要在循环内创建资源,因此根本不要使用defer- 否则,在函数退出之前,您不会关闭在循环内创建的任何资源,因此它们会堆积直到然后。相反,您应该在每次循环迭代结束时关闭它们, 而无需 :

  • 我开始为一个项目制作这个网页,到目前为止是这样的: 但是我想把文本区域放在另一个上面,而不是并排放置 我希望它看起来怎么样: 谁能帮帮我吗 https://i.stack.imgur.com/ZzsKS.png

  • 问题内容: 我正在尝试使用新的React Lazy和Suspense创建后备加载组件。这很好用,但后备时间仅显示几毫秒。有没有办法增加额外的延迟或最短时间,因此我可以在渲染下一个组件之前显示该组件的动画? 现在懒导入 等待组件: 我可以做这样的事情吗? 问题答案: 函数应该返回对象的承诺,该对象由具有默认导出功能的模块返回。不会返回承诺,也不能那样使用。尽管任意承诺可以: 如果目标是提供 最小的