Percebi que tem umas diferenças.
Meu exemplo:
Para montar um quadrado com Line e com Polygon, tem alguns pontos invertidos.
Point p1 = new Point(0,0); Point p11 = new Point(0,0);
Point p2 = new Point(30,0); Point p22 = new Point(0,30);
Point p3 = new Point(0,30); Point p44 = new Point(30,0);
Point p4 = new Point(30,30); Point p33 = new Point(30,30);
g.setColor(Color.brack);
g.fillPolygon(new int[]{p11.x,p22.x,p33.x,p44.x}, new int[]{p11.y,p22.y,p33.y,p44.y}, 4);
g.setColor(Color.red);
g.drawLine(p1.x, p1.y, p2.x, p2.y);
g.drawLine(p1.x, p1.y, p3.x, p3.y);
g.drawLine(p3.x, p3.y, p4.x, p4.y);
g.drawLine(p2.x, p2.y, p4.x, p4.y);