Графіка в 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));

У прикладі представлені градієнт і рисунок заливки.