我怎样才能使 JLabel 在一段时间后消失?

How can I cause a JLabel to disappear after a period of time?

我的程序有问题。我有一个按钮处理程序,我想让 JLabel 消失,然后等待一秒钟,然后导致第二个 JLabel 消失。我认为我的代码会工作,它会延迟,但是一旦方法完成,两个 JLabel 都会消失。它们同时消失,这不是我想要的。我的代码如下。感谢您的帮助!

private void jButton14ActionPerformed(java.awt.event.ActionEvent evt) {                                          

    String numInputStr = inputBox.getText();
    int numInput = Integer.parseInt(numInputStr);

    inputBox.setText("");

    if (numInput == 1) {
        coin1.setVisible(false);
        c1Visible = false;
    } else if (numInput == 2) {
        coin1.setVisible(false);
        c1Visible = false;
        coin2.setVisible(false);
        c2Visible = false;

    } else if (numInput == 3) {
        coin1.setVisible(false);
        c1Visible = false;
        coin2.setVisible(false);
        c2Visible = false;
        coin3.setVisible(false);
        c3Visible = false;
    } else {
        System.err.println("Invalid Input, try again");

    }

    jButton14.setVisible(false);

    try {
        Thread.sleep(1000);
    } catch (Exception E) {

    }

    if ((c1Visible == false) && (c2Visible == true) && (c3Visible == true)) {
        coin2.setVisible(false);
        coin3.setVisible(false);
        coin4.setVisible(false);
    } else if ((c2Visible == false) && (c3Visible == true) && (c1Visible == false)) {
        coin3.setVisible(false);
        coin4.setVisible(false);

    } else if ((c3Visible == false) && (c4Visible == true)) {
        coin4.setVisible(false);
    } else {
        System.out.println("Something went wrong, please try again");
    }


}

I thought my code would work, it does a delay, however both JLabels disappear once the method finishes.

这是一个经典的 Swing 并发问题,因为您从 EDT 调用 Thread.sleep(),这是一个单独的特殊线程,Swing 事件处理发生在该线程中,组件 creation/update 应该执行地方也。

如果您阻止此线程,您的 GUI 将无法自行重绘并将冻结,直到该线程准备好处理与 Swing 相关的内容。

为了实现您的目标,我建议您使用 Swing timer 让这些标签 在给定的时间段后消失

有关此事的更多信息,请查看: