3

キャンバスに 3 つの長方形が 1 つあります。3 つの長方形の色を 1 つずつゆっくりと変更したかったのです。例: アプリケーションを起動すると、同じ色 (青) の 3 つの四角形が表示されます。2 秒後、長方形の色が赤に変わります。再び 2 秒後に、次の長方形の色が変更されます。最後のものも同じ方法で行われます。つまり、2 番目の長方形の 2 秒後です。

私は私のやり方で書きました。しかし、それは機能していません。すべての長方形が一緒に変更されます。一つ一つ欲しい。

だれか論理を教えてください。

final Runnable timer = new Runnable() {

        public void run() {


            //list of rectangles size =3; each contain Rectangle.
            for(int i = 0 ; i < rectangleList.size();i++){

                if(rectangleListt.get(i).getBackgroundColor().equals(ColorConstants.blue)){
                    try {

                        rectangleList.get(i).setBackgroundColor(ColorConstants.yellow);
                        Thread.sleep(1500);
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }

                    //rectSubFigureList.get(i).setBorder(null);
                }/*else{
                    rectSubFigureList.get(i).setBackgroundColor(ColorConstants.blue);
                }*/


            }
4

2 に答える 2

4

おそらく、Swing のイベント スレッドまたは EDT (イベント ディスパッチ スレッド用) 内で Thread.sleep を呼び出すと、スレッド自体がスリープ状態になります。このスレッドは Swing のすべてのグラフィックスとユーザー インタラクションを処理するため、実際にはアプリケーション全体がスリープ状態になり、これは望んでいたことではありません。代わりに、これを読んでスイングタイマーを使用してください。

参考文献:

Hidde のコードを拡張するには、次のようにします。

// the timer:     
Timer t = new Timer(2000, new ActionListener() {
     private int changed = 0; // better to keep this private and in the class
     @Override
     public void actionPerformed(ActionEvent e) {
        if (changed < rectangleList.size()) {
            rectangleList.setBackgroundColor(someColor);
        } else {
            ((Timer) e.getSource()).stop();
        }
        changed++;
     }
 });
 t.start();
于 2012-05-20T11:18:42.513 に答える
3

タイマーを設定できます:

    // declaration: 
    static int changed = 0;

    // the timer:     
    Timer t = new Timer(2000, new ActionListener() {
         @Override
         public void actionPerformed(ActionEvent e) {
                // Change the colour here:
                if (changed == 0) {
                  // change the first one
                } else if (changed == 1) {
                  // change the second one
                } else if (changed == 2) {
                  // change the last one
                } else {
                  ((Timer) e.getSource()).stop();
                }
                changed ++;

          }
     });
     t.start();
于 2012-05-20T11:23:07.507 に答える