1

希望我的第一个问题不是太明显或研究得不好。下面的代码来自 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));
4

1 回答 1

3

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

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

于 2012-11-01T21:23:51.040 回答