我可以将 ellipse2D rectangle2D 以外的其他形状添加到 Java 中的 "Shape" 吗?

Can i add other shapes than ellipse2D rectangle2D to "Shape" in Java?

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

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

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

这可以吗?我的意思是,除了 Ellipse2DRectangle2D 等,我可以向 Shape 添加其他形状吗?

已编辑

这就是我用来绘制矩形的方法,例如:

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{

那我传参数在这里画三角形?

查看 Playing With Shapes 以获得一些有趣的想法。

它向您展示了如何使用多边形创建三角形 class:

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

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

Shape是一个接口。因此,您可以将实现此接口的每个 class 添加到您的 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

如果您创建 class 实现 接口 Shape,您还可以将您的对象添加到您的 ArrayList