Учебное пособие: Многопоточность и работа с потоками
Dimension d = getSize();
// Продолжение примера 1...
Метод paint() начинается с получения экземпляра grкласса Graphics2D простым приведением аргумента gr к типу Graphics2D. Затем, методом getRotatelnstance() определяется поворот на 45° против часовой стрелки вокруг точки (250.0, 150.0). Это преобразование— экземпляр at класса AffineTransform. Метод concatenate(), выполняемый объектом at, добавляет к этому преобразованию сжатие в два раза по обеим осям координат и перенос начала координат в точку (100.0, 60.0). Наконец, композиция этих преобразований устанавливается как текущее преобразование объекта g методом setTransform().
Преобразование выполняется в следующем порядке. Сначала пространство пользователя сжимается в два раза вдоль обеих осей, затем начало координат пользователя — левый верхний угол — переносится в точку (100.0, 60.0) пространства графического устройства. Потом картинка поворачивается на угол 45° против часовой стрелки вокруг точки (250.0, 150.0).
Результат этих преобразований показан на рис. 3.
Рис. 3. Преобразование координат
Рисование фигур средствами Java2D
Характеристики пера для рисования фигур описаны в интерфейсе Stroke. В Java 2D есть пока только один класс, реализующий этот интерфейс — класс BasicStroke.
Класс BasicStroke
Конструкторы класса BasicStroke определяют характеристики пера. Основнойконструктор
BasicStroke(float width, int cap, int join, float miter, float[] dash, float dashBegin)
задает:
· толщину пера width в пикселах;
· оформление конца линии cap; это одна из констант:
o CAP_ROUND — закругленный конец линии;
o CAP_SQUARE — квадратный конец линии;
o CAP_BUTT — оформление отсутствует;
· способ сопряжения линий join; это одна из констант:
o JOIN_ROUND — линии сопрягаются дугой окружности;
o JOIN_BEVEL — линии сопрягаются отрезком прямой, перпендикулярным биссектрисе угла между линиями;
o JOIN_MITER — линии просто стыкуются;
· расстояние между линиями miter, начиная с которого применяется сопряжение JOIN_MITER;
· длину штрихов и промежутков между штрихами — массив dash; элементы массива с четными индексами задают длину штриха в пикселах, элементы с нечетными индексами — длину промежутка; массив перебирается циклически;
· индекс 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 (float width) — прямойобрез CAP_SQUARE исопряжение JOIN_MITER созначением miter = 10.0f;