-1

パネルに円をペイントしようとしていますが、円の色はいくつかのパラメーターによって決まります。まず、円を白でペイントしてから、forループに入り、どのパラメータが一致するかを確認し、その色で円をペイントする必要があります。円の位置は配列に格納されます。これまでに行ったコードが機能しません。私は明らかに何か間違ったことをしていますが、Javaとコーディングに慣れていないので、非常に行き詰まっています。誰かが私のコードを編集/変更する方法を教えてくれたら、本当にありがたいです。ArrayList circlesTは円の位置の配列リストであり、tempはパラメータを持つ値を持つ配列です。

public void paintComponent(Graphics g) {            
        drawShapes(g, circlesT);          
    }           

    public void drawShapes(Graphics g, final ArrayList<Shape> circlesT) {
        final Graphics2D ga = (Graphics2D) g;
        ga.drawImage(newImage, 0, 0, null);
        for (int i = 0; i < circlesT.size(); i++) {
            ga.draw(circlesT.get(i));
            ga.setPaint(Color.white);
            ga.fill(circlesT.get(i));
        }    
        Timer timer = new Timer();
        TimerTask t;
        t = new TimerTask() {
            @Override
            public void run() {
                for (int i = 0; i < 10; i++) { 
                    if (read.temp.get(i) < 31 && read.temp.get(i) > 30) {
                        ga.draw(circlesT.get(i));
                        ga.setPaint(Color.green);
                        ga.fill(circlesT.get(i));
                    } else if (read.temp.get(i) < 32 && read.temp.get(i) > 31) {
                        ga.draw(circlesT.get(i));
                        ga.setPaint(Color.red);
                        ga.fill(circlesT.get(i));
                    } else if (read.temp.get(i) < 33 && read.temp.get(i) > 32) {
                        ga.draw(circlesT.get(i));
                        ga.setPaint(Color.yellow);
                        ga.fill(circlesT.get(i));
                    }                 
                }                    
            }
        };
        //repaint();
        timer.schedule(t, 0, 1000);    
    }
4

1 に答える 1

3

いくつかのポイント。

  • メソッド呼び出しの最後を超えてGraphicsオブジェクトを保持しないでください。paintComponent
  • 一般javax.swing.Timerに、代わりに を使用する必要がありjava.util.Timerます。
  • タイマー タスク/アクションで実際に行うべきことは、データの状態を更新して を呼び出すことrepaintです。
  • paintComponentすべての描画を行うコードは、戻る前に呼び出す必要があります。
于 2013-03-04T19:46:09.877 に答える