Рисования фигур с помощью Graphics в Java

Рисования фигур с помощью Graphics в JavaНиже перечислено несколько методов класса 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.