我可以在Java中将除ellipse2D rectangle2D之外的其他形状添加到“Shape”吗?

时间:2015-03-06 19:18:40

标签: java arraylist geometry shape graphics2d

我有一个可以保存所有形状的Arraylist。

ArrayList<Shape> shapes = new ArrayList<Shape>();

ArrayList的类型为Shape,因此具有椭圆,矩形,线,点。但现在我想绘制一个三角形并将其保存到同一个ArrayList中。

有可能这样做吗?我的意思是我可以为Shape添加其他形状,而不是Ellipse2DRectangle2D等吗?

EDITED

所以这就是我用来画一个矩形的例子:

private Rectangle2D.Float drawRectangle(int x1, int y1, int x2, int y2) {
            // Get the top left hand corner for the shape
            // Math.min returns the points closest to 0

            int x = Math.min(x1, x2);
            int y = Math.min(y1, y2);

            // Gets the difference between the coordinates and

            int width = Math.abs(x1 - x2);
            int height = Math.abs(y1 - y2);

            return new Rectangle2D.Float(x, y, width, height);
        }

所以要绘制我的三角形,我会有这个吗?

public class triangle implements Shape{

然后我传递参数在这里绘制三角形?

2 个答案:

答案 0 :(得分:1)

查看Playing With Shapes了解一些有趣的想法。

它向您展示了如何使用Polygon类创建三角形:

Polygon triangle = new Polygon();
triangle.addPoint(0, 0);
triangle.addPoint(15, 30);
triangle.addPoint(30, 0);
shapes.add( triangle );

它还展示了如何使用链接中提供的实用程序类来制作更复杂的形状,如星星和六边形。

答案 1 :(得分:1)

Shape是一个界面。因此,您可以将实现此接口的每个类添加到ArrayList。从文档here中,您可以添加来自Java API的所有内容:

  

Arc2D,Arc2D.Double,Arc2D.Float,Area,BasicTextUI.BasicCaret,   CubicCurve2D,CubicCurve2D.Double,CubicCurve2D.Float,DefaultCaret,   Ellipse2D,Ellipse2D.Double,Ellipse2D.Float,GeneralPath,Line2D,   Line2D.Double,Line2D.Float,Path2D,Path2D.Double,Path2D.Float,   Polygon,QuadCurve2D,QuadCurve2D.Double,QuadCurve2D.Float,   Rectangle,Rectangle2D,Rectangle2D.Double,Rectangle2D.Float,   RectangularShape,RoundRectangle2D,RoundRectangle2D.Double,   RoundRectangle2D.Float

如果您创建了一个实施接口Shape的课程,您还可以将对象添加到ArrayList