Classes that define geometric shapes are contained in the java.awt.geom package, but the Shape interface that these classes implement is defined in java.awt. Objects that represent shapes are often passed around as references of type Shape, so you'll usually need to import class names from both packages into your source file. Any class that implements the Shape interface defines a shape, and visually a shape will be some composite of straight lines and curves. Straight lines, rectangles, ellipses, and curves are all shapes.
A graphics context knows how to draw objects of a type that implements the Shape interface. To draw a shape on a component, you just need to pass the object defining the shape to the draw() method for the Graphics2D object for the component. To explore this in detail, I'll split the shapes into three groups: straight lines and rectangles, arcs and ellipses, and freeform curves. First, though, you must take a look at how points are defined.
19.4.1. Classes Defining Points
Two classes in the java.awt.geom package define points, Point2D.Float and Point2D.Double. From the class names you can see that these are both inner classes to the Point2D class, which also happens to be an abstract base class for both classes too. The Point2D.Float class defines a point from a pair of (x, y) coordinates of type float, whereas the Point2D.Double class defines a point as a coordinate pair of type double. The Point class in the java.awt package also defines a point, ...