时间:2010-07-26 16:50:07

标签: java swing awt graphics2d

4 个答案:

答案 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,它将连接这些点。