Ниже перечислено несколько методов класса Graphics, которые используются для рисования фигур:
- drawLine
- drawRectangle
- drawRoundRect
- draw3DRect
- drawPolygon
- drawPolyline
- drawOval
- drawArc
Для них существуют соответствующие fill-методы заполнения фигур, которые были предусмотрены в классе Graphics начиная с JDK 1.0. В Java 2D API используется совершенно другая, объектно-ориентированная модель, где вместо методов применяются перечисленные ниже классы:
- Line2D
- Rectangle2D
- RoundRectangle2D
- Ellipse2D
- Arc2D
- QuadCurve2D
- CubicCurve2D
- GeneralPath
Данные классы реализуют интерфейс Shape.
Кроме того, предусмотрен класс точки Point2D, который описывает точку с координатами х и у. Точки полезны для определения фигур, но сами по себе фигурами не являются.
Для того чтобы нарисовать фигуру, нужно создать экземпляр класса, который реализует интерфейс Shape, а затем вызвать метод draw для класса Graphics2D.
Классы Line2D, Rectangle2D, RoundRectangle2D, Ellipse2D и Arc2D соответствуют методам drawLine(), drawRectangle(), drawRoundRect(), drawOval() и drawArc(). Для понятия «трехмерный треугольник»(3D rectangle) не предусмотрено соответствующего метода draw3DRect(). Однако в Java 2D API поддерживаются два дополнительных класса для рисования кривых второго и третьего порядков.
Для рисования многоугольников не предусмотрено отдельного класса (вроде Polygon2D), а предлагается класс GeneralPath, который описывает контуры, состоящие из линий и кривых второго и третьего порядков. Класс GeneralPath можно использовать для описания многоугольника.
Перечисленные ниже классы наследуют общий класс RectangularShape:
- Rectangle2D
- RoundRectangle2D
- Ellipse2D
- Arc2D
Известно, что эллипсы и дуги не являются прямоугольниками, но их можно вписать в прямоугольник.
Каждый из классов, название которого заканчивается суффиксом 2D, имеет два подкласса, отличающейся способом указания координат(они задаются в виде чисел типа float и double). Например, Arc2D.Float и Arc2D.Double.
Для внутреннего представления координат все графические классы используют данные типа float, поскольку для них требуется меньше места для хранения, чем для данных типа double, к тому же они поддерживают достаточную точность для геометрических вычислений.
Однако, в языке Java обработка чисел float выполняется очень громоздкими и неуклюжими способами. Поэтому большинство методов графических классов используют параметры типа double и возвращают значение типа double.