【问题标题】:How to draw star in java swing using fillPolygonjava - 如何使用fillPolygon在java swing中绘制星星
【发布时间】:2016-01-27 07:04:17
【问题描述】:

我在设置星星坐标时遇到问题,有没有更好的解决方案。我无法得到正确的形状。有人可以帮我吗?

  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);
}

【问题讨论】:

  • 老实说,我会使用 2D Graphics 形状 API,它们允许您“绘制”一个形状,这比使用多边形更简单(恕我直言)。优点是,它们易于绘制和转换
  • 我发现这个问题更多是关于数学而不是编程。

标签: java swing java-2d shapes


【解决方案1】:

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

Regular Polygon Star

编辑:

Link

【讨论】:

  • 感谢您的快速回复。
  • 但仍然无法获得完美的 5 星。
【解决方案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);

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

【讨论】:

  • 也感谢您提供的参考资料非常有帮助
【解决方案3】:

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】:

    我无法设置星的坐标,有没有更好的解决方案

    查看Playing With Shapes。您应该能够使用 ShapeUtils 类来生成您的形状。

    此类将为您生成点数,因此您无需管理每个像素。

    【讨论】:

      【解决方案5】:

      一颗星星有 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);
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-04-04
        • 1970-01-01
        • 1970-01-01
        • 2011-01-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多