如何使用fillPolygon在java swing中绘制星形

时间:2016-01-27 07:04:18

标签: java swing java-2d shapes

我无法设置星星的坐标是否有更好的解决方案。我无法得到正确的形状。有人可以帮我吗?

  public void star(Graphics shapes)
{
    shapes.setColor(color);
    int[] x  = {42,52,72,52,60,40,15,28,9,32,42};
    int [] y = {38,62,68,80,105,85,102,75,58,20,38};
    shapes.fillPolygon(x, y, 5);
}

5 个答案:

答案 0 :(得分:2)

Sun的实现提供了一些自定义Java 2D形状,如RectangleOvalPolygon等,但这还不够。有些GUI需要更多自定义形状,例如带有圆角的Regular PolygonStarRegular polygon。该项目提供了一些常用的形状。所有类都实现了Shape接口,允许用户使用Graphics2D的所有常用方法,如fill()draw(),并通过组合它们来创建自己的形状。

Regular Polygon Star

修改

Link

答案 1 :(得分:2)

老实说,我使用2D Graphics形状API,它们允许你“绘制”一个形状,这更简单(恕我直言),然后使用多边形。优点是,它们易于绘制和转换

话虽如此,您实际遇到的问题是您没有将正确的信息传递给fillPolygon方法。

如果您查看JavaDocs for Graphics#fillPolygon,您会注意到最后一个参数是点数:

  

nPoints - 总分数。

但是你传递5,数组中实际有11个点

像...一样的东西。

shapes.setColor(color);
int[] x  = {42,52,72,52,60,40,15,28,9,32,42};
int [] y = {38,62,68,80,105,85,102,75,58,20,38};
shapes.fillPolygon(x, y, 11);

现在应该绘制所有点,但是你的一些坐标略微偏离,所以你可能想检查一下

答案 2 :(得分:0)

  

我在设置星形坐标时遇到问题是否有更好的解决方案

结帐Playing With Shapes。您应该能够使用ShapeUtils类来生成形状。

此课程将为您生成积分,因此您无需管理每个像素。

答案 3 :(得分:0)

你的Y的倒数第二个应该是60而不是20

g2.setColor(color);
int[] x  = {42,52,72,52,60,40,15,28,9,32,42};
int[] y = {38,62,68,80,105,85,102,75,58,60,38};
g2.fillPolygon(x , y, 11);

答案 4 :(得分:0)

一颗星星有10分,而不是11分

setBackground(Color.black);  
    int[]x={250,150,0,150,100,250,400,350,500,350};
    int[]y={100,200,200,300,400,300,400,300,200,200};
    g.fillPolygon( (x),(y),10);         
    setForeground(Color.cyan);

这将有助于绘制黑色背景和青色前景的星星