Spec-Zone .ru
спецификации, руководства, описания, API
|
Вы уже изучили, как потянуть большинство форм, представленных в java.awt.geom
пакет. Чтобы создать более сложную геометрию, такую как многоугольники, ломаные линии, или звезды, Вы используете другой class от этого пакета, GeneralPath
.
Этот class реализует Shape
взаимодействуйте через интерфейс и представляет геометрический путь, созданный из строк, и квадратных и кубических кривых. Эти три конструктора в этом class могут создать GeneralPath
WIND_NON_ZERO
), данное вьющееся правило (WIND_NON_ZERO
или WIND_EVEN_ODD
), или указанная начальная координатная емкость. Вьющееся правило определяет, как внутренняя часть пути определяется.
public void Paint (Graphics g) { Graphics2D g2 = (Graphics2D) g; ... }
Создать пустое GeneralPath
вызов экземпляра new GeneralPath()
и затем добавьте сегменты к форме при использовании следующих методов:
moveTo(float x, float y)
– Перемещает текущую точку пути к данной точкеlineTo(float x, float y)
– Добавляет линейный сегмент к текущему путиquadTo(float ctrlx, float ctrly, float x2, floaty2)
– Добавляет квадратный сегмент кривой к текущему путиcurveTo(float ctrlx1, float ctrly1, float ctrlx2, float ctrly2, float x3, floaty3)
– Добавляет кубический сегмент кривой к текущему путиclosePath()
– Закрывает текущий путьСледующий пример иллюстрирует, как потянуть ломаную линию при использовании GeneralPath
:
// draw GeneralPath (polyline) int x2Points[] = {0, 100, 0, 100}; int y2Points[] = {0, 50, 50, 0}; GeneralPath polyline = new GeneralPath(GeneralPath.WIND_EVEN_ODD, x2Points.length); polyline.moveTo (x2Points[0], y2Points[0]); for (int index = 1; index < x2Points.length; index++) { polyline.lineTo(x2Points[index], y2Points[index]); }; g2.draw(polyline); |
Этот пример иллюстрирует, как потянуть многоугольник при использовании GeneralPath
:
// draw GeneralPath (polygon) int x1Points[] = {0, 100, 0, 100}; int y1Points[] = {0, 50, 50, 0}; GeneralPath polygon = new GeneralPath(GeneralPath.WIND_EVEN_ODD, x1Points.length); polygon.moveTo(x1Points[0], y1Points[0]); for (int index = 1; index < x1Points.length; index++) { polygon.lineTo(x1Points[index], y1Points[index]); }; polygon.closePath(); g2.draw(polygon); |
Отметьте, что единственная разница между двумя последними примерами кода closePath()
метод. Этот метод делает многоугольник из ломаной линии, отодвигая прямую линию к координатам последнего moveTo
.
Добавить определенный путь до конца Вашего GeneralPath
возразите, что Вы используете один из append()
методы.
пример кода содержит дополнительные реализации произвольных форм.ShapesDemo2D.java