答案 0 :(得分:4)
每当我创建一个形状时,我总是创建一个Path2D.Double对象。然后,我使用moveTo到达起始位置,并使用lineTo()和curveTo()的组合来移动路径。然后,当我完成后,我调用closePath()。它总是正确填充。
我没有任何实现getPathIterator的经验,但我注意到你没有做一个closePath()。我不知道是否需要,但我觉得采取我的方法会有效。
以下是填充圆角矩形的示例:
double width = 300; double height = 400; Path2D.Double path = new Path2D.Double(); path.moveTo(0.0, 8.0); path.curveTo(0.0, 0.0, 8.0, 0.0, 8.0, 0.0); path.lineTo(width - 8.0, 0.0); path.curveTo(width, 0.0, width, 8.0, width, 8.0); path.lineTo(width, height - 8.0); path.curveTo(width, height, width - 8.0, height, width - 8.0, height); path.lineTo(8.0, height); path.curveTo(0.0, .height, 0.0, height - 8.0, 0, height - 8.0); path.closePath(); g2.fill(path);
答案 1 :(得分:2)
我对图形知之甚少。但我在sun的网站上看过这些例子。我只是发布链接以备不时之需。 http://java.sun.com/products/java-media/2D/samples/suite/index.html
答案 2 :(得分:0)
更改GeneralPath
gp.setWindingRule(GeneralPath.WIND_NON_ZERO);
答案 3 :(得分:0)
此外,尝试将append
作为第二个参数使用true
,它将连接这些点。