Witam.

Mam problem z odświeżaniem przy prostej animacji (rysuję kwadrat w pętli 10 razy zmieniając pozycję by był efekt animacji - poniżej kod) Po wywołaniu metody PanelGlass.powtarzaj(); z głównej klasy (main) wszystko działa - kwadrat porusza się, natomiast gdy wywołuję tą metodę naciskając przycisk "Start" pętla się wykonuje, ale nie widać animacji, rysuje tylko ostatni kwadrat. Dlaczego tak się dzieje i jak to naprawić? (W załączniku spakowana paczka z kodem)

Główna klasa:

package test4;
import javax.swing.*;

public class Test extends JComponent {
    public static void main(String[] args) {
        JFrame okno = new JFrame("Przezroczystość");
        JPanel panel = new PanelNormalny();
        okno.getContentPane().add(panel);
        PanelGlass panel1 = new PanelGlass();
        okno.setGlassPane(panel1);
        panel1.setVisible(true);
        okno.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        okno.setBounds(300,300,500,500);
        okno.setVisible(true);
        PanelGlass.setPanel(panel);
        PanelGlass.powtarzaj();
    }
}

Panel z przyciskiem:

package test4;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class PanelNormalny extends JPanel {
    public Graphics2D g2d;

    public PanelNormalny() {
        JButton b = new JButton("Start");
        b.setBounds(100, 10, 100, 50);
        add(b);
        b.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                PanelGlass.powtarzaj();
                System.out.println("Przycisk działa/n");
            }
        });
    }

    public void paintComponent(Graphics g) {
        g2d = (Graphics2D) g;
        g2d.fillRect(10, 10, 150, 150);
    }
}

**Panel z animacją: **

package test4;
import javax.swing.*;
import java.awt.*;

public class PanelGlass extends JComponent {

    public Graphics2D g2d;
    static int x = 10, y = 10;
    static JPanel panel;

    public static void setPanel(JPanel panel) {
        PanelGlass.panel = panel;
    }

    public static void setXY(int xx, int yy) {
        x = xx;
        y = yy;
        try
        {
            Thread.sleep(100);
        }
        catch(InterruptedException ex)
        {
            Thread.currentThread().interrupt();
        }
    }

    public static void powtarzaj(){
        for(int i = 0; i < 10; i++){
            setXY(i*10,i*10);
            panel.repaint();
        }
    }

    public void paintComponent(Graphics g) {
        g2d = (Graphics2D) g;
        g.setColor(Color.GRAY);
        g2d.fillRect(x, y, 100, 100);
    }
}