Java 如何在x秒内更改JLabel文本

Java 如何在x秒内更改JLabel文本,java,swing,timer,jlabel,Java,Swing,Timer,Jlabel,我想在短时间内更改JLabel文本(有一个计数器,如果有人在文本字段中键入错误答案,我想显示“错误答案”,而不是计数器。几秒钟后,我想再次显示计数器。) 这是一个简单的方法,你可以这样做。显然,您应该用实际代码替换注释。使用paint()void外部的变量,告诉您的paint()方法在屏幕上绘制或不绘制计数器。比如说, boolean wrongAnswer = true; public void paint(Graphics g){ if(b){ g.drawStrin

我想在短时间内更改
JLabel
文本(有一个计数器,如果有人在文本字段中键入错误答案,我想显示“错误答案”,而不是计数器。几秒钟后,我想再次显示计数器。)


这是一个简单的方法,你可以这样做。显然,您应该用实际代码替换注释。

使用
paint()
void外部的变量,告诉您的
paint()
方法在屏幕上绘制或不绘制计数器。比如说,

boolean wrongAnswer = true;
public void paint(Graphics g){
    if(b){
        g.drawString("Wrong Answer.", x, y);
        //It's best to use a timer, see the link provided
    }
    else{
        g.drawString(counter+"", x, y)
    }
}

对于某些代码,在本例中,您希望使用计时器对象。以下是适用于您的情况的演示:

public static void main(String[] args) {
    SwingUtilities.invokeLater(()->{
        JFrame frame = new JFrame();
        frame.setLayout(new FlowLayout());
        JLabel label = new JLabel("One");
        JButton button = new JButton("Ok");
        button.addActionListener(e -> {
            String oldText = label.getText();
            label.setText("Changed");
            Timer timer = new Timer(2000, event -> {
                label.setText(oldText);
            });
            timer.setRepeats(false);
            timer.start();
        });
        frame.add(label);
        frame.add(button);
        frame.pack();
        frame.setVisible(true);
    });
}

按钮的侦听器更改标签的文本并启动一个摆动计时器(此处的保险丝为2秒)。计时器超时后,它会向其(计时器的)注册的侦听器发送一个动作事件,在本例中,该侦听器会将文本还原为原始文本。

显然,他应该为此在代码中添加一个if。我的代码只是他计时器问题的解决方案。我根本不知道如何解决那个问题。我尝试了定时器,但是它改变了文本,但是没有重置回正常文本
public static void main(String[] args) {
    SwingUtilities.invokeLater(()->{
        JFrame frame = new JFrame();
        frame.setLayout(new FlowLayout());
        JLabel label = new JLabel("One");
        JButton button = new JButton("Ok");
        button.addActionListener(e -> {
            String oldText = label.getText();
            label.setText("Changed");
            Timer timer = new Timer(2000, event -> {
                label.setText(oldText);
            });
            timer.setRepeats(false);
            timer.start();
        });
        frame.add(label);
        frame.add(button);
        frame.pack();
        frame.setVisible(true);
    });
}