Рисуване на форми с Java 2D
Характеристиките на писалката за рисуване на форми са описани в интерфейса Stroke. В момента Java 2D има само един клас, който реализира този интерфейс, класът BasicStroke.
Клас BasicStroke
Конструкторите на класа BasicStroke определят характеристиките на писалката. главен конструктор,
BasicStroke(плавна ширина, int cap, int join, float miter, float[] тире, float dashBegin);
дебелина на писалката ширина в пиксели;
украса на края на капачката на линията; това е една от константите:
CAP_ROUND - заоблен край на линията;
CAP_SQUARE - квадратен край на линията;
CAP_BUTT - без декорация;
Част III. Създаване на GUI и аплети
метод на конюгиране на свързване на линии; това е една от константите:
JOIN_ROUND - линиите се съединяват с дъга от окръжност;
JOIN_BEVEL - линиите се свързват с права отсечка, перпендикулярна на ъглополовящата на ъгъла между линиите;
JOIN_MITER - линиите просто се съединяват;
разстояние между линиите на скосяване, от които се прилага смесването
дължина на чертите и интервали между чертите — масив тире; елементите на масива с четни индекси задават дължината на хода в пиксели, елементите с нечетни индекси — дължината на празнината; масивът се повтаря циклично;
индексът на dashBegin, започвайки от който се итерират елементите на масива dash. Останалите конструктори задават някои характеристики по подразбиране:
BasicStroke(float width, int cap, int join, float miter) — плътна линия;
BasicStroke(float width, int cap, int join) — плътна линия със съвпадение JOIN_ROUND или JOIN_BEVEL; JOIN_MITER е настроен на miter = 10.0f;
BasicStroke(плавна ширина) — CAP_SQUARE право изрязване и JOIN_MITER със скосяване = 10.0f;
BasicStroke() - ширина 1.0f.
По-добре е да видите веднъж, отколкото да прочетете сто пъти. Листинг 9.4 дефинира пет пера с различни характеристики, както е показано на фигура 9. 9.4 показва как рисуват.
Списък 9.4. Определение за перо
импортиране на java.awt.*; импортиране на java.awt.geom.*; импортиране на javax.swing.*;
клас StrokeTest разширява JFrame< StrokeTest (низ s)
супер(и); setSize(500, 400); setVisible(true);
g.setFont(нов шрифт("Serif", Font.PLAIN, 15));
BasicStroke pen1 = нов BasicStroke(20, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER,30);
BasicStroke pen2 = нов BasicStroke(20, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND);
BasicStroke pen3 = нов BasicStroke(20, BasicStroke.CAP_SQUARE, BasicStroke.JOIN_BEVEL);
BasicStroke pen4 = нов BasicStroke(10, BasicStroke.CAP_ROUND, BasicStroke.JOIN_BEVEL, 10, dash1, 0);

Глава 9
BasicStroke pen5 = нов BasicStroke(10, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL, 10, dash2, 0);
g.draw(нов правоъгълник2D.Double(50, 50, 50, 50)); g.draw(нова линия2D.Double(50, 180, 150, 180)); g.setStroke(pen2);
g.draw(нов правоъгълник2D.Double(200, 50, 50, 50)); g.draw(нова линия2D.Double(50, 230, 150, 230)); g.setStroke(pen3);
g.draw(нов правоъгълник2D.Double(350, 50, 50, 50)); g.draw(нова линия2D.Double(50, 280, 150, 280)); g.drawString("JOIN_MITER", 40, 130); g.drawString("JOIN_ROUND", 180, 130); g.drawString("JOIN_BEVEL", 330, 130); g.drawString("CAP_BUTT", 170, 190); g.drawString("CAP_ROUND", 170, 240); g.drawString("CAP_SQUARE", 170, 290); g.setStroke(pen5);
g.draw(нова линия2D.Double(50, 330, 250, 330)); g.setStroke(pen4);
g.draw(нова линия2D.Double(50, 360, 250, 360)); g.drawString("", 260, 335);g.drawString("", 260, 365);
Ориз. 9.4. Пера с различни характеристики
Част III. Създаване на GUI и аплети
След като създадете писалка с един от конструкторите и настроите писалката с метода setStroke(), можете да рисувате различни форми с методите draw() и fill().
Общите свойства на фигурите, които могат да бъдат начертани с метода draw() на класа Graphics2D, са описани в интерфейса Shape. Този интерфейс е реализиран за създаване на общ набор от форми - правоъгълници, линии, елипси, дъги, точки - от класовете Rectangle2D,
RoundRectangle2D, Line2D, Ellipse2D, Arc2D, Point2D на пакета java.awt.geom. Този пакет има
също и класовете CubicCurve2D и QuadCurve2D за създаване на криви от трети и втори ред.
Всички тези класове са абстрактни, но има техни реализации - вложени класове Double и Float за задаване на координати по числа от съответния тип. Списък 9.4 използва класовете Rectangle2D.Double и Line2d.Double за чертане на правоъгълници и линии.
Клас GeneralPath
Пакетът java.awt.geom има друг интересен клас, наречен GeneralPath. Обектите от този клас могат да съдържат сложни структури, съставени от прави или извити линейни сегменти и други форми, свързани или несвързани помежду си. Освен това, тъй като този клас имплементира интерфейса Shape, неговите екземпляри сами по себе си са форми и могат да бъдат членове на други обекти от класа GeneralPath.
Обект от класа GeneralPath се изгражда така. Първо, празен обект от класа GeneralPath се създава от конструктора по подразбиране GeneralPath() или обект, съдържащ такъв
форма, с конструктора GeneralPath(Shape sh).
След това форми се добавят към този обект чрез метода
добавяне (форма sh, булево свързване);
Ако параметърътconnect е true, тогава новата форма се свързва с предишни фигури с помощта на текущата писалка.
Обектът има текуща точка. Първоначално координатите му са (0, 0), след това може да се мести
придвижване до точка (x, y) с помощта на метода moveTo(float x, float y).
От текущата точка до точката (x, y) можете да начертаете:
линеен сегмент чрез метода lineTo(float x, float y);
сегмент от квадратна крива с помощта на метода quadTo(float x1, float y1, float x, float y);
Крива на Безие с помощта на метода curveTo(float x1, float y1, float x2, float y2, float x, float y).
Текущата точка след това става точка (x, y) . Началната и крайната точка могат да бъдат свързани с помощта на метода closePath(). Ето как можете да създадете триъгълник с дадени върхове:
Общ път p = нов общ път();
// Преместване на текущата точка към първия връх,