Класс Graphics предоставляет базовые методы рисования, а класс Graphics2D предоставляет более мощные возможности рисования. В этом разделе описывается класс Graphics, а в следующем разделе описывается Graphics2D.
Класс Graphics предоставляет основные методы геометрического рисования, в основном включая: рисование сегментов линий, рисование прямоугольников, рисование кругов, рисование цветной графики, рисование эллипсов, рисование дуг, рисование многоугольников и т. д.
1. Нарисуйте линию. <br />Чтобы нарисовать отрезок линии в окне, вы можете использовать метод drawLine() класса Graphics:
drawLine(int x1,int y1,int x2,int y2)
Например, следующий код рисует сегмент линии между точкой (3,3) и точкой (50,50) и рисует точку в точке (100,100).
g.drawLine(3,3,50,50);//Рисуем отрезок линии g.drawLine(100,100,100,100);//Рисуем точку.
2. Нарисуйте прямоугольник <br />Прямоугольники бывают двух типов: правильные и закругленные.
(1) Существует два метода рисования обычных прямоугольников:
drawRect(int x, int y, int width, int height): нарисуйте прямоугольник, окруженный каркасом. Параметры x и y определяют положение верхнего левого угла, а параметры width и height — это ширина и высота прямоугольника.
fillRect(int x, int y, int width, int height): заполняет прямоугольник заранее определенным цветом, чтобы получить цветной прямоугольный блок.
Следующий код является примером рисования прямоугольника:
g.drawRect(80,100,40,25);//Рисуем каркас g.setColor(Color.yellow);g.fillRect(20,70,20,30);//Рисуем цветной блок
(2) Есть два способа нарисовать скругленный прямоугольник:
drawRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight): это скругленный прямоугольник, окруженный линиями. Параметры x и y определяют положение верхнего левого угла прямоугольника; параметры width и height — это ширина и высота прямоугольника arcWidth и arcHeight — поперечный диаметр и продольный диаметр дуги скругления соответственно;
fillRoundRect(int x, int y, int width, int height, int arcWidth, int Archeight): — скругленный прямоугольник, заполненный заранее определенным цветом. Значение каждого параметра такое же, как и в предыдущем методе.
Следующий код является примером рисования прямоугольника:
g.drawRoundRect(10,10,150,70,40,25);//Рисуем прямоугольник с закругленными углами g.setColor(Color.blue); g.fillRoundRect(80,100,100,100,60,40);//Рисуем закругленный прямоугольный блок g.drawRoundRect(10,150,40,40,40,40);//Рисуем круг g.setColor(Color.red); g.fillRoundRect(80,100,100,100,100,100);//Рисуем круг
Вы можете нарисовать круг, нарисовав скругленный прямоугольник. Когда ширина и высота прямоугольника равны, поперечный диаметр скругленной дуги и продольный диаметр скругленной дуги также равны и равны ширине и высоте. прямоугольник, рисуется круг. См. комментарии к приведенному выше примеру. Первый вариант предназначен для рисования круга, а второй — для рисования кругового блока.
3. Нарисуйте трехмерный прямоугольник <br />Существует два метода рисования трехмерного прямоугольника:
draw3DRect(int x,int y,int width,int height, boolean raise): Нарисуйте выделенный прямоугольник. Среди них x и y определяют положение верхнего левого угла прямоугольника, параметры width и height — это ширина и высота прямоугольника, а поднятый параметр — выделен ли он или нет.
fill3DRect(int x,int y,int ширина,int высота, логическое значение): залейте выделенный прямоугольник заранее определенным цветом.
Следующий код является примером рисования выступающего прямоугольника:
g.draw3DRect(80,100,40,25,true);//Рисуем каркас g.setColor(Color.yellow); g.fill3DRect(20,70,20,30,true);//Рисуем цветной блок
4. Нарисуйте эллипс <br />Эллипс определяется горизонтальной и вертикальной осями эллипса. Есть два способа нарисовать овал:
drawOval(int x, int y, int width, int height): рисует эллипс, окруженный линиями. Параметры x и y определяют положение верхнего левого угла эллипса, а параметры width и height представляют собой горизонтальную и вертикальную оси.
fillOval(int x, int y, int width, int height): это овал, заполненный заранее определенным цветом, и представляющий собой блок раскраски. Вы также можете использовать метод рисования эллипса, чтобы нарисовать круг. Когда горизонтальная ось и вертикальная ось равны, нарисованный эллипс представляет собой круг.
Следующий код является примером рисования эллипса:
g.drawOval(10,10,60,120);//Нарисуем эллипс g.setColor(Color.cyan);g.fillOval(100,30,60,60);//Нарисуем круг g.setColor(Color.magenta ) ;g.fillOval(15,140,100,50);//Рисуем эллипс
5. Нарисуйте дугу
Есть два способа нарисовать дугу:
drawArc(int x, int y, int width, int height, int startAngle, int arcAngle): Нарисуйте дуговую линию как часть эллипса. Центр эллипса — это центр охватывающего его прямоугольника, где параметрами являются координаты (x, y) верхнего левого угла охватывающего прямоугольника, ширина — ширина, а высота — высота. Единицей измерения параметра startAngle является градус, а начальный угол 0 градусов относится к положению на 3 часа. Параметры startAngle и arcAngle указывают, что, начиная с угла startAngle, дуга из градусов arcAngle рисуется в направлении против часовой стрелки. По соглашению, положительные градусы располагаются против часовой стрелки, отрицательные градусы — по часовой стрелке, например, -90 градусов — это 6 часов.
fillArc(int x, int y, int width, int height, int startAngle, int arcAngle): используйте цвет, установленный методом setColor(), чтобы нарисовать часть цветного эллипса.
Следующий код является примером рисования дуги:
g.drawArc(10,40,90,50,0,180);//Рисуем дуговую линию g.drawArc(100,40,90,50,180,180);//Рисуем дуговую линию g.setColor(Color.yellow); g.fillArc(10,100,40,40,0,-270);//Заполняем три четверти эллипса без правого верхнего угла g.setColor(Color.green); g.fillArc(60,110,110,60,-90); ,- 270);//Заполняем три четверти недостающего нижнего левого угла эллипса
6. Рисуем многоугольники <br />Многоугольник — это замкнутая плоская фигура, образованная соединением нескольких отрезков прямой встык. Координаты x и y конечных точек отрезков многоугольника хранятся в двух массивах соответственно. Чтобы нарисовать многоугольник, необходимо соединить их отрезками прямых линий в порядке заданных координатных точек. Ниже приведены два часто используемых метода рисования многоугольников:
drawPolygon(int xpoints[],int yPoints[],int nPoints): нарисовать многоугольник.
fillPolygon(int xPoints[],int yPoints[],int nPoints): раскрасьте многоугольник цветом, заданным методом setColor(). Массив xPoints[] хранит точки координат x, yPoints[] хранит точки координат y, а nPoints — это количество точек координат.
Обратите внимание, что приведенный выше метод не закрывает многоугольник автоматически. Чтобы нарисовать замкнутый многоугольник, последняя точка заданной точки координат должна совпадать с первой точкой. Следующий код реализует заполнение треугольника и рисование восьмиугольника.
int px1[]={50,90,10,50};//Многоугольник можно нарисовать только тогда, когда первая и последняя точки совпадают int py1[]={10,50,50,10}; ]={140,180,170,180,140,100,110,140}; py2[]={5,25,35,45,65,35,25,5}; g.setColor(Color.blue); g.fillPolygon(px1,py1,4); g.setColor(Color.red) ; g.drawPolygon(px2,py2,9);
Вы также можете использовать полигональные объекты для рисования многоугольников. Создайте объект многоугольника, используя класс многоугольника Polygon, а затем используйте этот объект для рисования многоугольников. Основные методы класса Polygon:
Например, следующий код рисует треугольник и заливает его желтым треугольником. Обратите внимание, что использование объекта-многоугольника для рисования замкнутого многоугольника не требует совпадения первой и последней точек.
int x[]={140,180,170,180,140,100,110,100}; int y[]={5,25,35,45,65,45,35,25}; Полигон полигон1 = новый полигон1.addPoint(50,10); .addPoint(90,50); полигон1.addPoint(10,50); g.drawPolygon(polygon1); g.setColor(Color.yellow); Полигон полигон2 = новый Полигон(x,y,8); g.fillPolygon(polygon2);
7. Стереть прямоугольный блок <br />Если вам нужно, чтобы в середине цветного изображения остался пустой прямоугольник, вы можете заполнить прямоугольный блок цветом фона, что эквивалентно использованию «ластика» на прямоугольном блоке. Метод:
ClearRect(int x, int y, int width, int height): Удалить цвет прямоугольного блока, заданный параметрами.
Например, следующий код реализует раскраску, которая стирает прямоугольный блок в круге:
g.setColor(Color.blue); g.fillOval(50,50,100,100);g.clearRect(70,70,40,55);
8. Ограничьте область отображения чертежа . <br /> Используйте прямоугольник для обозначения области отображения графика. График должен находиться в пределах указанного диапазона. Новые значения координат не будут пересчитываться, а превышенные. часть не будет отображаться автоматически. Метод — clipRect(int x, int y, int width, int height), который ограничивает отображение графики указанной областью и не отображает лишнюю часть. При покрытии нескольких зон ограничения получается зона пересечения зон ограничения. Например, код:
g.clipRect(0,0,100,50);g.clipRect(50,25,100,50);
Эквивалентно
g.clipRect(50,25,50,25);
9. Копирование графики <br /> Для копирования графики используйте метод copyArea() класса Graphics. Формат использования:
copyArea(int x, int y, int width, int height, int dx, int dy), dx и dy соответственно представляют количество пикселей, смещенных при вставке графики в исходное положение. Положительные значения означают смещение вправо или в исходное положение. Отрицательные значения — это смещения влево или вверх. Ориентиром для перемещения является координата верхнего левого угла копируемого прямоугольника.
Например, следующий код иллюстрирует копирование графики путем настройки части одного прямоугольника и всего другого прямоугольника.
g.drawRect(10,10,60,90); g.fillRect(90,10,60,90); g.copyArea(40,50,60,70,-20,80); g.copyArea(110, 50,60,60,10,80);
[Пример] Небольшое приложение переписывает метод update(), чтобы очистить только блок с кружком, а не текст, и в окне отображается постоянно движущийся красный квадрат.
import java.applet.*;import java.awt.*;public class example7_3 расширяет Applet { int i=1; public void init() { setBackground(Color.yellow); public void Paint(Graphics g) {i = i +8; если (i>160)i=1; g.setColor(Color.red);g.fillRect(i,10,20,20); g.drawString("Я изучаю метод update()",100,100); try{ Thread.sleep(100); catch(InterruptedException e){} repaint(); } public void update(Graphics g){ g .clearRect (i,10,200,100);//Не сбрасывать надпись «Я изучаю метод update()» Paint(g }});
Общая программа рисования должна наследовать JFrame и определять подкласс окна JFrame, а также наследовать JPanel и определять подкласс JPanel. Переопределите метод PaintComponent() в подклассе JPanel и вызовите метод рисования в этом методе для рисования различной графики.
[Пример] Приложение, использующее режим рисования XOR.
импорт javax.swing.*; импорт java.awt.*; общедоступный класс Пример7_4 расширяет JFrame { public static void main (String args []) { GraphicsDemo myGraphicsFrame = new GraphicsDemo (); }} class ShapesPanel расширяет JPanel { SharpesPanel () { setBackground(Color.white); } Public void PaintComponent(Graphics g) { super.paintComponent(g); setBackground(Color.yellow); //Цвет фона — желтый g.setXORMode(Color.red); //Устанавливаем режим рисования XOR и цвет — красный g.setColor(Color.green); g.fillRect(20, 20, 80, 40); //Фактический цвет представляет собой смесь зеленого + желтого = серого g.setColor(Color.yellow); g.fillRect(60, 20, 80, 40); //Вторая половина — желтый+желтый=чтение, первая половина — желтый+серый g.setColor(Color.green); g.fillRect(20, 70, 80, 40); //Фактический цвет: зеленый+желтый Смешанный цвет = серый.g.fillRect(60, 70, 80, 40 //Первая половина — (зеленый+желтый)+серый); =Цвет фона, последняя половина — зеленый+желтый = серый g.setColor(Color.green); g.drawLine(80, 100, 180, 200); //Прямая линия — зеленый+желтый = серый g.drawLine( 100, 100, 200, 200); //То же, что и выше/*Нарисуйте частично перекрывающуюся прямую линию. Средняя часть исходной прямой имеет серый+серый=цвет фона, а расширенная часть — зеленый+желтый=серый.*/ g.drawLine(140, 140). , 220, 220); g. setColor(Color.yellow); //Анализируем изменения цвета следующих прямых линий, которые перекрываются с предыдущей силой g.drawLine(20, 30, 160, 30); g.drawLine(20, 75, 160, 75); }}class GraphicsDemod расширяет JFrame { public GraphicsDemo() { this.getContentPane().add(new ShapesPanel()); setTile("Демонстрация базового метода рисования"); (300, 300); setVisible (истина}});