的Java Swing:延迟之后更改文字(Java Swing: Change Text after

2019-07-04 21:33发布

基本上,我有这个游戏,一旦猜中正确答案在开始新的游戏一个新词。 我想,以显示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定时器也。

Answer 1:

Swing是一个事件驱动环境。 当你阻止事件调度线程,没有新的事件进行处理。

你不应该有任何耗时的过程,阻断EDT(如I / O,循环或Thread#sleep为例)。

你可能会喜欢有通过读取事件调度线程的详细信息。

相反,你应该使用javax.swing.Timer 。 这将引发ActionListener给定延迟后。

其中的好处是, actionPerformed方法与事件调度线程的上下文中执行。

看看这个或这个或这或这一个例子



Answer 2:

它在3秒后工程..

ActionListener taskPerformer = new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent ae) {
            statusbar.setText("Status");
        }
    };
    Timer timer = new Timer(3000, taskPerformer);
    timer.setRepeats(false);
    timer.start();


Answer 3:

如果这一段代码是在事件处理程序,那么你持有了UI线程,它是不会为UI更新将只在你的事件处理程序完成你的工作后,会发生工作。

您应该创建另一个线程做的工作“休眠3秒,设备和更改文本字段,并触发重绘”。 使用定时器或类似的实用程序是实现我所描述的最简单的方法。



文章来源: Java Swing: Change Text after delay