Рисование геометрических
фигур
В этом разделе мы опишем методы класса Graphics,
предназначенные для рисования элементарных
геометрических фигур, таких как линии,
прямоугольники, окружности и так далее.
Линии
Для того чтобы нарисовать прямую тонкую
сплошную линию, вы можете воспользоваться
методом drawLine, прототип которого приведен ниже:
public abstract void drawLine(int x1,
int y1,int x2, int y2);
Концы линии имеют координаты (x1, y1) и (x2, y2), как
это показано на рис. 1.
Рис. 1. Рисование прямой линии
К сожалению, в контексте отображения не
предусмотрены никакие атрибуты, позволяющие
нарисовать пунктирную линию или линию
увеличенной толщины.
Прямоугольники и квадраты
Среди методов класса Graphics есть несколько,
предназначенных для рисования прямоугольников.
Первый из них, с именем drawRect, позволяет
нарисовать прямоугольник, заданный координатами
своего левого верхнего угла, шириной и высотой:
public void drawRect(int x, int y,
int width, int height);
Параметры x и y задают, соответственно,
координаты верхнего левого угла, а параметры width
и height - высоту и ширину прямоугольника (рис. 2).
Рис. 2. Рисование прямоугольника
В отличие от метода drawRect, рисующего только
прямоугольную рамку, метод fillRect рисует
заполненный прямоугольник. Для рисования и
заполнения прямоугольника используется цвет,
выбранный в контекст отображения (рис. 3).
Рис. 3. Рисование заполненного прямоугольника
Прототип метода fillRect приведен ниже:
public abstract void fillRect(int x, int y,
int width, int height);
Метод drawRoundRect позволяет нарисовать
прямоугольник с закругленными углами:
public abstract void drawRoundRect(int x,
int y, int width,
int height, int arcWidth, int arcHeight);
Параметры x и y определяют координаты верхнего
левого угла прямоугольника, параметры width и height
задают, соответственно его ширину и высоту.
Размеры эллипса, образующего закругления по
углам, вы можете задать с помощью параметров arcWidth
и arcHeight. Первый из них задает ширину эллипса, а
второй - высоту (рис. 4).
Рис. 4. Рисование прямоугольника с
закругленными углами
Метод fillRoundRect позволяет нарисовать заполненный
прямоугольник с закругленными углами (рис. 5).
Рис. 5. Рисование заполненного прямоугольника с
закругленными углами
Назначение параметров этого метода аналогично
назначению параметров только что рассмотренного
метода drawRoundRect:
public abstract void fillRoundRect(int x,
int y,
int width, int height,
int arcWidth, int arcHeight);
Метод fill3Drect предназначен для рисования
выступающего или западающего прямоугольника:
public void fill3DRect(int x, int y,
int width, int height, boolean raised);
Если значение параметра raised равно true, рисуется
выступающий прямоугольник, если false - западающий.
Назначение остальных параметров аналогично
назначению параметров метода drawRect.
Многоугольники
Для рисования многоугольников в классе Graphics
предусмотрено четыре метода, два из которых
рисуют незаполненные многоугольники, а два -
заполненные.
Первый метод рисует незаполненный
многоугольник, заданный массивами координат по
осям X и Y:
public abstract void drawPolygon(
int xPoints[],
int yPoints[], int nPoints);
Через параметры xPoints и yPoints передаются,
соответственно, ссылки на массивы координат по
оис X и Y. Параметр nPoints задает количество точек в
массивах.
На рис. 6 показан многоугольник, нарисованный
методом drawPolygon.
Рис. 6. Многоугольник, нарисованный методом
drawPolygon
В этом многоугольнике шесть вершин с
координатами от (x0, y0) до (x5, y5), причем для
того чтобы он стал замкнутым, координаты первой и
последней вершины совпадают.
Второй метод также рисует незаполненный
многоугольник, однако в качестве параметра
методу передается ссылка на объект Polygon:
public void drawPolygon(Polygon p);
Класс Polygon достаточно прост. Приведем описание
его полей, конструкторов и методов:
Поля класса
Количество вершин
public int npoints;
Массив координат по оси X
public int xpoints[];
Массив координат по оси Y
public int ypoints[]
Конструкторы
public Polygon ();
public Polygon(int xpoints[],
int ypoints[], int npoints);
Методы
Добавление вершины
public void addPoint(int x, int y);
Получение координат охватывающего
прямоугольника
public Rectangle getBoundingBox();
Проверка, находится ли точка внутри
многоугольника
public boolean inside(int x, int y);
Ниже мы показали фрагмент кода, в котором
создается многоугольник, а затем в него
добавляется несколько точек. Многоугольник
рисуется методом drawPolygon:
Polygon p = new Polygon();
p.addPoint(270, 239);
p.addPoint(350, 230);
p.addPoint(360, 180);
p.addPoint(390, 160);
p.addPoint(340, 130);
p.addPoint(270, 239);
g.drawPolygon(p);
Если вам нужно нарисовать заполненный
многоугольник (рис. 7), то для этого вы можете
воспользоваться методами, приведенными ниже:
public abstract void fillPolygon(
int xPoints[],
int yPoints[], int nPoints);
public void fillPolygon(Polygon p);
Первый из этих методов рисует многоугольник,
координаты вершин которого заданы в массивах,
второй - получая объект класса Polygon в качестве
параметра.
Рис. 7. Многоугольник, нарисованный методом fillPolygon
Овалы и круги
Для рисования окружностей и овалов вы можете
воспользоваться методом drawOval:
public abstract void drawOval(
int x, int y,
int width, int height);
Параметры этого методы задают координаты и
размеры прямоугольника, в который вписывается
рисуемый овал (рис. 8).
Рис. 8. Рисование овала
Метод fillOval предназначен для рисования
заполненного овала (рис. 9). Назначение его
параметров аналогично назначению параметров
метода drawOval:
public abstract void fillOval(
int x, int y,
int width, int height);
Рис. 9. Рисование заполненного овала
Сегменты
Метод drawArc предназначен для рисования
незаполненного сегмента (рис. 10). Прототип этого
метода приведен ниже:
public abstract void drawArc(
int x, int y,
int width, int height,
int startAngle, int arcAngle);
Рис. 10. Рисование незаполненного сегмента
Параметры x, y, width и height задают координаты
прямоугольника, в который вписан сегмент.
Параметры startAngle и arcAngle задаются в градусах. Они
определяют, соответственно, начальный угол и
угол разворота сегмента.
Для того чтобы нарисовать заполненный сегмент,
вы можете воспользоваться методом fillArc:
public abstract void fillArc(int x, int y,
int width, int height,
int startAngle, int arcAngle);
Задание области ограничения
Если для окна аплета задать область
ограничения, то рисование будет возможно только
в пределах этой области. Область ограничения
задается методом clipRect, прототип которого мы
привели ниже:
public abstract void clipRect(
int x, int y,
int width, int height);
Параметры x, y, width и height задают координаты
прямоугольной области ограничения.
Копирование содержимого прямоугольной
области
Метод copyArea позволяет скопировать содержимое
любой прямоугольной области окна аплета:
public abstract void copyArea(
int x, int y,
int width, int height, int dx, int dy);
Параметры x, y, width и height задают координаты
копируемой прямоугольной области. Область
копируется в другую прямоугольную область
такого же размера, причем параметры dx и dy
определяют координаты последней.
|