我有一个可以保存所有形状的Arraylist。
ArrayList<Shape> shapes = new ArrayList<Shape>();
ArrayList的类型为Shape
,因此具有椭圆,矩形,线,点。但现在我想绘制一个三角形并将其保存到同一个ArrayList中。
有可能这样做吗?我的意思是我可以为Shape
添加其他形状,而不是Ellipse2D
,Rectangle2D
等吗?
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{
然后我传递参数在这里绘制三角形?
答案 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
。