如何让JLabel在一段时间后消失?

时间:2016-05-26 18:37:23

标签: java multithreading swing jlabel

我的程序存在问题。我有一个按钮处理程序,我想让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");
    }


}

1 个答案:

答案 0 :(得分:5)

  

我认为我的代码会起作用,但它会延迟,但是两个JLabel   一旦方法结束就消失。

这是一个典型的Swing并发问题,因为你从EDT调用Thread.sleep(),这是一个单一的特殊线程,其中发生Swing事件处理,同时也应该进行组件创建/更新。 / p>

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

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

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

相关问题