我需要使用Java和Graphics2D绘制一辆汽车。我使用了多个basicstrokes来提出汽车的形状。如何填充颜色?一个例子是以三角形的形状绘制3条线,然后想要用颜色填充它。
答案 0 :(得分:2)
您不能简单地填充仅由绘图三行创建的形状。您必须定义形状,包括它所包含的所有行。
这究竟是如何实施取决于服务因素。例如,是否要对所有三条线使用相同的笔划,或者它们是否需要不同的笔划。
如果您已经提供了一些关于您目前是如何绘制线条的信息,这可能会有所帮助。我会试着在这里猜一下......
所以假设您当前的代码大致如下所示:
void paintCar(Graphics2D g)
{
g.setStroke(new BasicStroke(1.0f));
g.setColor(Color.BLUE);
// Draw the triangle
g.drawLine(100,100,200,100);
g.drawLine(100,200,150, 50);
g.drawLine(150, 50,100,100);
}
另外填充此三角形的最简单方法是按如下方式更改它:
void paintCar(Graphics2D g)
{
g.setStroke(new BasicStroke(1.0f));
g.setColor(Color.BLUE);
Path2D path = new Path2D();
// Build the triangle
path.append(new Line2D.Double(100,100,200,100), false);
path.append(new Line2D.Double(100,200,150, 50), true);
path.append(new Line2D.Double(150, 50,100,100), true);
// Draw the triangle
g.draw(path);
// Fill the triangle, with a different color
g.setColor(Color.CYAN);
g.fill(path);
}
...有更优雅和简洁的方法来实现这一目标。通常情况下,不会添加单个Line2D
段,而只需使用Path2D
来构建形状:
void paintCar(Graphics2D g)
{
g.setStroke(new BasicStroke(1.0f));
g.setColor(Color.BLUE);
// Build the triangle
Path2D path = new Path2D();
path.moveTo(100,100);
path.lineTo(200,100);
path.lineTo(150, 50);
path.closePath();
// Draw the triangle
g.draw(path);
// Fill the triangle, with a different color
g.setColor(Color.CYAN);
g.fill(path);
}
因此,如果您以适当的形式获得形状的坐标(可能存储为Point2D
个对象的列表),您可以更轻松地构建一个可以绘制和填充的形状。