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で境界線を変更する必要があります。それがSwingTimerがあなたのために行うことです。

于 2012-11-01T21:23:51.040 に答える