Графика в Java 2D. Graphics2D

Java 2D

Java 2D предоставляет новые возможности работы с графикой.

Java 2D представлена классами: Graphics2D, BasicStroke, GeneralPath и другими.

Наверх

Graphics2D

Рассмотрим простой пример использования методов класса Graphics2D в Java:

Получаем:
Graphics2D, Java

Ниже разбираются все методы, использованные в примере.

Наверх

Как определить перо?

С помощью класса BasicStroke:

Наверх

Как начертить прямую линию?

Метод draw класса Graphics2D начертит прямую линию с помощью класса Line2D.Float — это наследник абстрактного класса Line2D:

g.draw(new Line2D.Float(20, 20, 360, 20));

здесь 20, 30 — это координаты x, y начала линии,
360, 30 — координаты конца линии.

Наверх

Как нарисовать прямоугольник?

Методом draw класса Graphics2D с помощью класса Rectangle2D.Float — это наследник абстрактного класса Rectangle2D:

g.draw(new Rectangle2D.Float(20, 40, 340, 20));

20, 40 — это координаты верхнего левого угла прямоугольника;
340 — длина;
20 — высота прямоугольника.

Наверх

Как нарисовать прямоугольник с закругленными углами?

Методом draw класса Graphics2D с помощью класса RoundRectangle2D.Float — это наследник абстрактного класса RoundRectangle2D.

Сопряжение, т.е. закругление на углах, делается с помощью частей овала.

g.draw(new RoundRectangle2D.Float(20, 70, 340, 30, 20, 15));

первые 4 аргумента как у обычного прямоугольника. Пятый аргумент — 20 — это ширина прямоугольника, в который вписана часть овала сопряжения. Шестой аргумент — 15 — это высота прямоугольника, в который вписана часть овала сопряжения.

Наверх

Как нарисовать овал?

Методом draw класса Graphics2D с помощью класса Ellipse2D.Float — это наследник абстрактного класса Ellipse2D:

g.draw(new Ellipse2D.Float(20, 110, 150, 60));

Аргументы определяют прямоугольник, в который вписан овал.

Наверх

Как нарисовать окружность?

Методом draw класса Graphics2D с помощью класса Ellipse2D.Float — это наследник абстрактного класса Ellipse2D:

g.draw(new Ellipse2D.Float(200, 110, 60, 60));

Аргументы определяют прямоугольник, в который вписана окружность. Здесь рисуем овал, но длина и высота описанного прямоугольника равны, что и даёт окружность.

Наверх

Как нарисовать дугу?

Методом draw класса Graphics2D с помощью класса Arc2D.Float — это наследник абстрактного класса Arc2D:

g.draw(new Arc2D.Float(280, 110, 80, 60, 0, 180, Arc2D.OPEN));

первые 4 аргумента как у обычного прямоугольника. Пятый аргумент — 0 — это угол, от которого отсчитывается угол самой дуги. 180 — это угол дуги. Углы отсчитывают от горизонтальной оси: по часовой стрелке отрицательное направление, протв — положительное. В примере 180 градусов (величина дуги) отсчитываем от горизонтальной линии. Последний аргумент — Arc2D.OPEN — говорит о том, что дуга не будет замкнутой.

Ещё примеры:

g.draw(new Arc2D.Float(280, 150, 80, 50, 0, 80, Arc2D.CHORD));
g.draw(new Arc2D.Float(240, 150, 80, 60, 0, 90, Arc2D.PIE));
Наверх

Как нарисовать многоугольник?

Методом draw класса Graphics2D с помощью класса GeneralPath:

Здесь arrayX — это х-координаты вершин многоугольника, arrayY — это y-координаты вершин многоугольника, 8 — число вершин многоугольника. Класс GeneralPath позволяет соединить отрезки, строка:

genPath.closePath();

замыкает последовательность отрезков, образуя многоугольник.

Комментарием закрыт вариант рисования многоугольника с помощью класса Polygon.

Наверх

Как вывести строку?

Методом draw класса Graphics2D:

строка "SBP" (точнее контуры этих букв) будет выведена от точки с координатами 270, 220.

Наверх

Как начертить график?

Как график функции начертить? Сначала начертим координатные оси:

// Draw axes;
g.drawLine(20, 220, 20, 350);
g.drawLine(20, 350, 360, 350);
g.drawString("Y", 25, 230);
g.drawString("X", 350, 346);

А теперь построить график функции можно просто. Для этого используем метод draw класса Graphics2D и класс GeneralPath:

График строим по точкам, xArray — это x-координаты точек, yArray — y-координаты точек графика, nPoint — это число точек. Если убрать комментарий перед genPath.closePath(), то начальная и конечная точки графика замкнутся.

Наш график являет собой кривую намагничивания. Но почему график такой угловатый (см. картинку выше)? Если взять больше точек, то график будет более плавным.

Наверх

Как залить фигуру цветом?

Методом fill класса Graphics2D:

g.fill(new Ellipse2D.Float(21, 111, 149, 59));

В примере представлены градиентная и текстурная заливки.