Problema com Repaint

Pessoal, sou novo em java, principalmente em interface gráfica. Tenho um trabalho que é implementar o “jantar dos filósofos”. Então, estou tentando fazer a GUI dele, pois em formato texto já está funcionando, porém, não estou conseguindo. O que estou fazendo errado. Segue o código resumido

Engenheiros.java

class Engenheiros extends Thread{
    FabricaPanel panel = new FabricaPanel(5);

    public void construir(){
        try{
            panel.cor = Color.GREEN;
            panel.repaint();
        }
    }
}

FabricaPanel.java

public class FabricaPanel extends JPanel{
    public Color cor;

    public FabricaPanel(int total){
        this.total = total;
    }

    public void paintComponent(Graphics g){
        super.paintComponent(g);
        this.setBackground(Color.WHITE);
        g.setColor(this.cor);

        for(int i = 0; i < total; i++){
            double radianos = i * (2.0 * Math.PI / (double) this.total);
            double x = Math.sin(radianos) * raio + centro;
            double y = Math.cos(radianos) * raio + centro;

            g.fillOval((int)x, (int)y, 20, 20);
        }
    }
}

O que eu preciso é, para cada thread Engenheiro que executar o método construir(), o círculo correspondente a ele deve mudar de cor. Alguém tem ideias?

Dá uma olhada aqui.

http://www.guj.com.br/posts/list/142456.java

davidbuzatto, acho que é exatamente isto que eu quero. Vou dar uma estudada nesta Graphics2d que você postou e vejo de funciona. Vlw.