Problema em metodo para desenhar

é o seguinte tenho um JPanel que o usuario clica em diverentes posições x e y quando o usuario clicar na sua area ele armazena estas informações em um arrayList e depois ele chama um metodo no paint do JPanel caso ele clique em desenhar para desenhar o poligno com os pontos x y passados… segue o metodo:

private void desenhaPoligno(Graphics g){
 Object []oArrX = listCordenadasX.toArray();  
 Object []orrY   = listCordenadasY.toArray();
 int size = listCordenadasX.size();
 int []arrX = new int[size];
 int []arrY = new int[size];
 for(int i=1;i<size;i++){
 	arrX[i] = new Integer(oArrX[i].toString()).intValue();
 	arrY[i] = new Integer(orrY[i].toString()).intValue();
 }
 g.drawPolygon(arrX,arrY,size);

}

so que ele não esta funcionando…
o metodo e chamado corretamente e os pontos x y estão vindo certos mas ele não desenha o poligno pq?


import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

class PainelMouse extends JPanel implements MouseMotionListener {
    public PainelMouse() {
        addMouseMotionListener(this);
    }
    public void mouseDragged(MouseEvent evt) {
        Graphics g = getGraphics();
        g.drawLine(evt.getX(), evt.getY(), 1, 1);
        g.dispose();
    }
    public void mouseMoved(MouseEvent evt) {
        System.out.println("x:" + evt.getX() + ", y:" +  evt.getY());
    }
}

class JanelaMouse extends JFrame {
    public JanelaMouse() {
        setSize(300, 300);
        getContentPane().add(new PainelMouse());
    }
}

public class DesenhoMouse {
    public static void main(String args[]) {
        JanelaMouse jm = new JanelaMouse();
        jm.show();
    }
}
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

class PainelDesenhaFormas extends JPanel {
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.setColor(Color.blue);
        g.drawRect(10, 10, 80, 80);
        g.drawRoundRect(100, 10, 80, 30, 15, 15);
        g.setColor(Color.red);
        for (int i = 0; i < 100; i += 3)
            g.drawOval(100, 100, i, i);
    }
}

class JanelaDesenhaFormas extends JFrame {
    public JanelaDesenhaFormas() {
        setTitle("Desenha Formas");
        setSize(300, 200);
        addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e)
            { System.exit(0); }
        });
        getContentPane().add(new PainelDesenhaFormas());
    }
}

public class DesenhaFormas {
    public static void main(String args[]) {
        JanelaDesenhaFormas jdf = new JanelaDesenhaFormas();
        jdf.show();
    }
}

Dê uma lida nesse tópico, veja o exemplo, e tente entender o princípio:

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

Você terá que sobrescrever o método paintComponent de um panel e lá usar o método g.drawPolygon(arrX,arrY,size);

Outra coisa: sempre que postar código, use a tag code, como descrito aqui.

O código do metaleiro tem alguns erros conceituais sobre o uso do objeto graphics do swing:

  1. Nunca dê dispose no objeto que você obteu com getGraphics();
  2. Você não deve alterar o estado do objeto graphics recebido no método paintComponent. Isso inclui fazer chamada a qualquer método “setter”, como setColor. Se for manipular faça o seguinte:

[code]public void paintComponent(Graphics g) {
//Criamos uma cópia do objeto graphics.
//Agora podemos alterar o estado da cópia à vontade.
Graphics2D g2d = (Graphics2D) g.create();

//Aqui desenhamos a imagem, usando o objeto g2d.

//Podemos dar dispose na cópia, não em g
g2d.dispose();
}[/code]