在thread.sleep()之前不更新边框格式

时间:2012-11-01 21:05:31

标签: java multithreading awt sleep event-dispatch-thread

希望我的第一个问题不是太明显或者研究得不好。以下代码来自MouseListener的mouseClicked事件。我希望将边框颜色更改为绿色,以向用户显示他/她点击的内容,启动睡眠计时器,然后将其更改为黑色。不幸的是,更改只发生在Thread.sleep(可能是一大堆方法)之后。目前,对黑色的更改进行了评论,颜色更改确实变为绿色(永久)。如果没有注释,则没有可见的颜色变化。这是怎么回事?

由于

    JLabel myLabel = (JLabel) e.getSource();
    myLabel.setBorder(BorderFactory.createLineBorder(Color.green));

    try {
        Thread.sleep(2000);
    } catch (InterruptedException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }

    //myLabel.setBorder(BorderFactory.createLineBorder(Color.black));

1 个答案:

答案 0 :(得分:3)

如果您在事件调度线程中休眠,则会阻止它执行其工作,即重新绘制GUI并显示您刚刚设置的边框。你只需要冻结整个GUI 2秒钟。

您需要使用摇摆计时器,并让此计时器在2秒后将边框重置为其原始颜色。睡眠必须在另一个线程中完成,然后必须在EDT中更改边框。这就是Swing Timer为您所做的。