Помощничек
Главная | Обратная связь


Археология
Архитектура
Астрономия
Аудит
Биология
Ботаника
Бухгалтерский учёт
Войное дело
Генетика
География
Геология
Дизайн
Искусство
История
Кино
Кулинария
Культура
Литература
Математика
Медицина
Металлургия
Мифология
Музыка
Психология
Религия
Спорт
Строительство
Техника
Транспорт
Туризм
Усадьба
Физика
Фотография
Химия
Экология
Электричество
Электроника
Энергетика

ЛАБОРАТОРНАЯ РАБОТА №9



 

Тема: Классы пакета java.awt. Основы оконной графики. Работа с фреймами. Работа с графикой, цветом и шрифтами. Использование элементов управления.

Цель: Научиться создавать и управлять окнами, шрифтами, выводом текста и графикой.

Теоретические сведения

Классы пакета java.awt.

Рассматриваемые вопросы:

9.1 Классы AWT

9.2 Основы окон

9.2.1 Component

9.2.2 Container

9.2.3 Panel

9.2.4 Window

9.2.5 Frame

9.2.6 Canvas

9.3 Работа с рамочными окнами

9.3.1 Установка размеров окна

9.3.2 Сокрытие и отображение окна

9.3.3 Установка заголовка окна

9.3.4 Закрытие рамочного окна

9.4 Создание рамочного окна в аплете

9.5 Создание оконной программы

9.6 Работа с графикой

9.6.1 Рисование линий

9.6.2 Рисование прямоугольников

9.6.3 Рисование эллипсов и окружностей

9.6.4 Установка размеров графики

9.7 Работа с цветом

9.7.1 Методы Color

 

9.1 Классы AWT

Классы AWT содержатся в пакете java.awt. Это один из наиболее объемных пакетов java. К счастью, благодаря логической организации в виде иерархии "сверху вниз", понять и использовать его гораздо легче, чем может показаться на первый взгляд. Далее перечислены некоторые из множества классов AWT.

AWTEvent - инкапсулирует события AWT.

Button - создает элемент управления = экранную кнопку.

Canvas - пустое, свободное от семантики окно.

Checkbox - создает элемент управления - помечаемый флажок.

CheckboxGroup - создает группу элементов управления - флажков.

Choice - создает всплывающий список.

Color - управляет цветами в переносимой и не зависящей от платформы манере.

Component - абстрактный суперкласс для различных компонентов AWТ.

Container - подкласс Component, который может содержать другие компоненты.

Dialog - создает диалоговое окно.

Event - инкапсулирует события.

Font - инкапсулирует шрифт печати.

Frame - создает стандартное окно, снабженное линейкой заголовка, элементами управления размерами и линейкой меню.

Graphics - инкапсулирует графический контекст. Этот контекст используется разнообразными методами вывода для отображения в окне.

Image - инкапсулирует графические образы.

List - Создает список, из которого пользователь может выбирать. Аналогичен стандартному окну списка Windows.

Menu - создает выпадающее меню.

Panel - простейший конкретный подкласс Container.

Point - инкапсулирует пару декартовых координат, хранящихся в х и у.

Rectangle - инкапсулирует прямоугольник.

Scrollbar – создает элемент управления – линейку прокрутки.

TextArea – создает элемент управления – многострочный текстовый редактор.

TextField – создает элемент управления однострочный текстовый редактор.

Window – создает окно без рамки, без линейки меню и заголовка.

 

9.2 Основы окон

AWT определяет окна в соответствии с иерархией классов, которые добавляют функциональность и специфичность на каждом уровне. Два наиболее часто используемых типа окон наследуются либо от Panel, что используется в аплетах, либо от класса Frame, который создает стандартное окно приложения. Большую часть своей функциональности эти окна наследуют от своих родительских классов. Поэтому описание иерархии классов, относящихся к этим двум классам, является основополагающим для их пони мания.

9.2.1 Component

В вершине иерархии находится класс Component. Component - это абстрактный класс, инкапсулирующий все атрибуты визуальноrо компонента. Все элементы пользовательского интерфейса являются подклассами Component. Он определяет свыше сотни общедоступных методов, отвечающих за управление событиями, такими как клавишный и мышиный ввод, перемещение и изменение размеров окна, а также перерисовка. Объект Component отвечает за запоминание текущих цветов фона и переднего плана, а также текущего выбранного шрифта для печати.

 

9.2.2 Container

Класс Container - подкласс Component. Он имеет дополнительные методы, позволяющие вкладывать в него другие объекты Соmроnеnt. Другие объекты Container также могут быть находиться внутри Container (поскольку они сами являются экземплярами Component). Это позволяет строить многоуровневые системы вложенности. Контейнер отвечает за раскладку (то есть, расположение) любых компонентов, которые он содержит.

 

9.2.3 Panel

Класс Panel - конкретный подкласс Container. Он не добавляет никаких новых методов, а просто реализует Container. Таким образом, Panel может обеспечивать peкурсивную вложенность и представляет собой конкретный экранный компонент. Panel - суперкласс для Applet. Когда экранный вывод направляется в аплет, он рисуется на поверхности объекта Panel. По сути, Panel - это окно, лишенное линейки заголовка, линейки меню и рамки. И поэтому вы не можете видеть упомянутых элементов, когда аплет запущен внутри браузера. Когда же вы запускаете аплет в средстве просмотра аплетов, то заголовок и рамку предоставляет это средство.

Другие компоненты могут быть добавлены к объекту Panel с помощью его метода add () (унаследованного от Container). Как только эти компоненты добавлены, вы можете позиционировать их и изменять размеры вручную, используя методы setLocation (), setSize (), setPreferredSize () или setBounds (), определенные в Component.

 

9.2.4 Window

Класс Window создает окно верхнего уровня. Окно верхнего уровня не содержится внутри другого объекта; оно располагается непосредственно на рабочем столе. Обычно вам не придется создавать объекты Window непосредственно. Вместо этоrо вы будете работать с подклассом Window, называемым Frame, который описан ниже.

 

9.2.5 Frame

Класс Frame инкапсулирует то, что обычно воспринимается как "окно". Это подкласс Window, имеющий линейку заголовка, линейку меню, границы и элементы управления размером. Если вы создаете объект Frame внутри аплета, он будет содержать предупреждающее сообщение, такое как "java Applet Window", предназначенное пользователю, чтобы известить eгo о том, что окно аплета было создано. Это окно предупредит пользователя о том, что окно, которое он видит, запущено аплетом, а не программным обеспечением, выполняющимся на самом компьютере. (Аплет, маскирующийся под приложение, выполняющееся на хосте, может быть использовано для получения паролей и другой важной информации без ведома пользователя.) Когда окно Frame создается отдельно стоящим приложением вместо аплета, то тем самым создается нормальное окно.

 

9.2.6 Canvas

Не являющийся частью иерархии аплетов или рамочных окон, класс Canvas, возможно, не покажется вам особенно полезным. Canvas инкапсулирует пустое окно, в котором вы можете рисовать.

 

9.3 Работа с рамочными окнами

После аплета тип окон, которые вам придется создавать чаще всего, унаследован от Frame. Вы будете создавать дочерние окна внутри аплетов и окна верхнего уровня или дочерние - для отдельно выполняемых приложений. Как упоминалось, это создает окна в стандартном стиле.

Вот два конструктора класса Frame:

Frame ()

Frame(String title)

Первая форма создает стандартное окно без заголовка. Вторая форма создает окно с указанным в tit1e заголовком. Обратите внимание, что вы не можете специфицировать размеры окна. Вместо этого должны устанавливать размер окна после его создания.

Существует несколько ключевых методов, которые вы будете использовать при работе с окнами Frame. Сейчас мы их и рассмотрим.

 

9.3.1 Установка размеров окна

Метод setSize() используется для установки размеров окна. Его сигнатура показана ниже:

void setSize (int newWidth, int newHeight)

void setSize(Dimension newSize)

Новый размер окна указан в newWidth и newHeight или же в полях width и height передаваемого объекта Dimension, переданного в newSize. Размеры задаются в пикселях.

Метод getSize() применяется для получения текущего размера окна. Его сигнатура выглядит следующим образом:

Dimension getSize()

Этот метод возвращает текущий размер окна в полях width и height объекта Dimension.

 

9.3.2 Сокрытие и отображение окна

После того как рамочное окно создано, оно остается невидимым до тех пор, пока вы не вызовите setVisble () . Его сигнатура такова:

void setVisible(boolean visibleFlag)

Компонент видим, если этому методу передается аргумент true. В противном случае он скрыт.

 

9.3.3 Установка заголовка окна

Вы можете изменить заголовок рамочного окна, используя метод setTitle(), который имеет следующую общую форму:

void setTitle(String newTitle)

Здесь newTit1e - новый заголовок окна.

 

9.3.4 Закрытие рамочного окна

При использовании рамочного окна ваша программа должна удалять окно с экрана после его закрытия, вызывая setVisible (false). Чтобы перехватить событие закрытия окна, вы должны реализовать метод windowClosing() интерфейса WindowListener. Внутри windowClosing () вы должны удалить окно с экрана.

 

9.4 Создание рамочного окна в аплете

Хотя можно создавать окно просто созданием экземпляра Frame, вам редко доведется поступать так, поскольку с таким окном не так можно делать. Например, вы не сможет принимать или обрабатывать события, которые происходят в нем, или просто выводить в него информацию. В основном вам придется создавать подклассы Frame. Это позволит переопределять методы Frame и обеспечивать обработку событий.

Создать новое рамочное окно из аплета достаточно просто. Для начала создается подкласс Frame. Затем переопределяется любой из стандартных методов аплета, таких как init(), start() и stop( ) , чтобы отображать или скрывать фрейм по необходимости. И, наконец, реализуется windowC1osing () .

Как только вы определите подкласс Frame, то сможете создать объект этого класса. Это приведет к появлению рамочного окна, которое, однако, изначально будет невидимым. Вы делаете его видимым посредством вызова setVisible () . При создании окно получает высоту и ширину по умолчанию. Вы можете установить размеры окна явно с помощью метода setSize ().

Приведенный ниже аплет создает подкласс Frame по имени SampleFrame. Экземпляр окна этого класса создается внутри метода init() класса AppletFrame. Обратите внимание на то, что SampleFrame вызывает конструктор Frame. Это позволяет создать стандартное рамочное окно с заголовком, переданным в tit1e. Этот пример переопределяет методы аплета start() и stop() так, что они, соответственно, отображают и скрывают дочернее окно. Это позволяет автоматически удалить окно, когда вы прерываете работу аплета, когда закрываете окно, или, при использовании браузера - когда переходите на другую страницу. Это также вызывает отображение дочернего окна, когда браузер возвращается к аплету.

// Создание дочернеrо окна из аплета.

import java.awt.*;

import java.awt.event.*;

import java.applet.*;

/*

<applet code="AppletFrame" width=300 height=50>

</applet>

*/

// Создание подкласса Frame.

class SampleFrame extends Frame

SampleFrame(String title) {

super(title);

// создание объекта для обработки событий окна

MyWindowAdapter adapter = new MyWindowAdapter(this);

// регистрация его для получения событий

addWindowListener(adapter);

}

public void paint(Graphics g) {

g.drawString("This is in frame window", 10, 40);

}

}

class MyWindowAdapter extends WindowAdapter {

SampleFrame sampleFrame;

public MyWindowAdapter(SampleFrame samp1eFrame) {

this.sampleFrame = sampleFrame;

}

public void windowClosing(WindowEvent we) {

sampleFrame.setVisible(false);

}

}

// Создание рамочноего окна.

public class AppletFrame extends Applet {

Frame f;

public void init() {

f = new SampleFrame ("А Frame Window");

f.setSize(250,250);

f.setVisible(trиe);

}

public void start() {

f.setVisible(trиe);

}

public.void stop() {

f.setVisible(false);

}

public void paint(Graphics g) {

g.drаwString("Это окно аплета", 10, 20);

}

}

 

9.5 Создание оконной программы

Хотя создание аплетов - привычная задача для применения java AWT, на основе AWT также возможно создавать отдельно стоящие приложения. Чтобы сделать это, просто создавайте экземпляр нужного окна или окон внутри main(). Например, следующая программа создает рамочное окно, реагирующее на щелчки мыши и нажатия клавиш.

// Создание приложения на базе AWT.

import java.awt.*;

import jаvа.аwt.еvепt.*;

import java.applet.*;

// Создание рамочного окна.

public c1ass АррWiпdоw ехtепds Frame

String keymsg = "This is а test.";

String mousemsg = '''';

int mоusеХ=30, mоusеУ=30;

public Аррwindоw() {

аddКеуListеnеr(nеw MyKeyAdapter(this));

аddМоusеListеnеr(nеw MyMouseAdapter(this));

аddWindоwListеnеr(nеw МуWindоwАdарtеr( ));

}

public void раint(Grарhics g) {

g.drаwString(kеуmsg, 10, 40);

g.drаwString(mоusеmsg, mouseX, mouseY);

}

// Создание окна.

public static void mаin(String args[])

АррWindоw аррwin = nеw Appwindow();

аррwin. setSize (nеw Dimеnsiоn(300, 200));

аррwin. setTitle ("An AWT-Based App1ication") ;

// аррWin.sеtТitlе("АWТ-приложение");

аррwin.sеtVisiblе(truе);

}

}

class MyKeyAdapter extends KeyAdapter {

AppWindow appWindow;

public MyKeyAdapter(AppWindow appWindow) {

this.appWindow = appWindow;

}

public void keyTyped(KeyEvent ke) {

appWindow.keymsg += ke.getKeyChar();

appWindow.repaint();

} ;

}

class MyMouseAdapter extends MouseAdapter {

AppWindow appWindow;

public MyMouseAdapter(AppWindow appWindow)

this.appWindow = appWindow;

} ;

public void mousePressed(MouseEvent me)

appWindow.mouseX = me.getX();

appWindow.mouseY = me.getY();

appWindow.mousemsg = "Mouse Down аt " + appwindow.mouseX +

// appWindow.mousemsg = "Клавиша мыши нажата в " + appWindow.mouseX + ", " + appWindow.mo\lseY;

appWindow.repaint();

}

}

class MyWindowAdapter extends WindowAdapter

public void windowClosing(WindowEvent we) (

System.exit (0);

}

}

 

9.6 Работа с графикой

AWT поддерживает богатый ассортимент графических методов. Вся графика рисуется относительно окна. Это может быть главное окно аплета, дочернее окно аплета или же окно автономного приложения. Начальная точка каждого окна находится в верхнем левом углу и имеет координаты 0,0. Координаты указываются в пикселях. Весь вывод в окно выполняется в конкретном графическом контексте. Графический контекст, инкапсулированный классом Graphics, получается двумя путями:

- передается в аплет, когда вызывается один из его методов, таких как paint () или update ();

- возвращается методом getGraphics () класса Component.

Класс Graphics определяет множество функций рисования. Любая фигура может быть нарисована только контуром либо залита. Объекты рисуются и заливаются текущим выбранным цветом графики, которым по умолчанию является черный. Когда рисуется графический объект, выходящий за пределы окна, его вывод автоматически усекается.

Давайте рассмотрим несколько методов рисования.

 

9.6.1 Рисование линий

Линии рисуются с помощью метода drawLine () , показанного ниже:

void drawLine (int startX, int startY, int endX, int endY)

drawLine() отображает линию в текущем цвете рисования, начинающуюся с точки stаrtХ,stаrtY и заканчивающуюся в endX,endY.

Следующий аплет рисует несколько линий.

// Рисование линий

import java.awt.*;

import java.applet.*;

/*

<applet code = "Lines" width = 300 height = 200>

</applet>

*/

public class Lines extends Applet

public void paint(Graphics g)

g.drawLine(0, 0, 100, 100);

g.drawLine(0, 100, 100, 0);

g.drawLine(40, 25, 250, 180);

g.drawLine(75, 90, 400, 400);

g.drawLine(20, 150, 400, 40);

g.drawLine(5, 290, 80, 19);

}

}

 

9.6.2 Рисование прямоугольников

Методы drawRect () и fillRect () отображают, соответственно, контурный и закрашенный прямоугольники.

Выглядят они так:

void drawRect(int top, int left, int width, int height)

void fillRect(int top, int left, int width, int height)

Левый верхний угол прямоугольника расположен в top, left. Размеры прямоугольника задаются width и height.

Чтобы нарисовать прямоугольник со скругленными углами, используйте методы drawRoundRect () и fillRoundRect () , показанные ниже:

void drawRoundRect(int top, int left, int width, int height,

int xDiam, int yDiam)

void fillRoundRect(int top, int left, int width, int height,

int xDiam, int yDiam)

Нарисованные этими методами прямоугольники будут иметь скругленные углы. Диаметр скругления по оси Х указывается в xDiam. Диаметр скругления дуги по оси Y задается в yDiam.

Приведенный ниже аплет рисует несколько прямоугольников.

// Рисование прямоугольников

import java.awt.*;

import java.applet.*;

/*

<applet code = "Rectangles" width = 300 height = 200>

</applet>

*/

public class Rectangles extends Applet

public void paint(Graphics g) {

g.drawRect(10, 10, 60, 50);

g.fillRect(100, 10, 60, 50);

g.drawRoundRect(190, 10, 60, 50, 15, 15);

g.fillRoundRect(70, 90, 140, 100, 30, 40);

}

}

 

9.6.3 Рисование эллипсов и окружностей

Чтобы нарисовать эллипс, используйте drawOval (). Для заливки эллипса применяйте fillOva1 () . Эти методы выглядят следующим образом:

void drawOval(int top, int left, int width, int height)

void fillOval(int top, int left, int width, int height)

Эллипс рисуется внутри описанного прямоугольника, чей верхний левый угол имеет координаты top, left, а ширина и высота указаны в width и height. Чтобы нарисовать круг, в качестве описанного прямоугольника задавайте квадрат. Следующая программа рисует несколько эллипсов:

// Рисование эллипсов.

import java.awt.*;

import java.applet.*;

/*

<applet code = "Ellipses" width = 300 height = 200>

</applet>

*/

public class Ellipses extends Applet

public void paint(Graphics g) {

g.drawOval(10, 10, 50, 50);

g.fillOval(100, 10, 75, 50);

g.drawOval(190, 10, 90, ЗО);

g.fillOval(70, 90, 140, 100);

}

}

 

9.6.4 Установка размеров графики

Часто возникает необходимость установить размер графического объекта таким, чтобы он занял текущий размер окна, в котором он нарисован. Чтобы добиться этого, получите текущие размеры окна вызовом getSize () для оконного объекта. Этот метод вернет размеры окна, инкапсулируя их в объекте Dimension. Получив текущий размер окна, вы можете соответствующим образом масштабировать графику.

Для демонстрации этого приема рассмотрим аплет, который, начиная с квадрата размером 200х200 пикселей, будет увеличивать его с каждым щелчком мыши на 25 пикселей до тех пор, пока тот не получит размер 500х500 пикселей. В этой точке следующий щелчок вернет его к размеру 200х200 пикселей, после чего процесс начнется сначала.

Внутри окна прямоугольник рисуется вдоль внутренних границ окна; внутри прямоугольника рисуется Х, чтобы заполнить его. Этот аплет работает в appletviewer, но может не работать в окне браузера.

// Изменение размеров для заполнения текущего размера окна.

import java.applet.*;

import java.awt.*;

import java.awt.event.*;

/*

<applet code = "ResizeMe" width = 200 height = 200>

</applet>

*/

public class ResizeMe extends Applet (

final int inc = 25;

int mах = 500;

int min = 200;

Dimension d;

public ResizeMe() {

addМouseListener(new MouseAdapter() {

public void mouseReleased(MouseEvent mе) {

int w = (d.width + inc) > max?min : (d.width + inc) ;

int h = (d.height + inc) > max?min : (d.height + inc);

setSize(new Dimension(w, h));

}

}};

}

public void paint(Graphics g)

d = getSize () ;

g.drawLine(0, 0, d.width - 1, d.height - 1);

g.drawLine(0, d.height - 1, d.width - 1, 0);

g.drawRect(0, 0, d.width - 1, d.height - l);

}

}

 

9.7 Работа с цветом

Java поддерживает цвета в переносимой, независимой от устройства манере. Система цветов AWT позволяет специфицировать любой цвет по вашему желанию. Затем она находит наилучшее соответствие этому цвету, учитывая ограничения оборудования дисплея, на котором выполняется ваш аплет или программа. Таким образом, код не должен заботиться о различиях в поддержке цвета различными аппаратными устройствами. Цвет инкапсулирован в классе Color. Color определяет несколько констант (вроде Co1or .black) для описания множества наиболее часто используемых цветов. Вы можете также создавать свои собственные цвета, используя один из доступных конструкторов цвета. Ниже приведены три наиболее часто используемых формы таких конструкторов:

Color(int red, int green, int blue)

Color(int rgbValue)

Color(float red, float green, float blue)

Первый конструктор принимает три инградиента, задающие цвет как смесь красной, зеленой и синей составляющих. Эти значения должны находиться в пределах от 0 до 255, как в следующем примере:

new Color(255, 100, 100); // светло-красный

Второй конструктор цвета принимает единственный целочисленный аргумент, содержащий смесь интенсивностей красного, зеленого и синего, упакованную в одно целое число. Это целое число организовано так, что красная составляющая упакована в биты с 16 по 23, зеленая - с 8 по 15 и синяя - с 0 по 7. Вот пример применения этого конструктора:

int newRed = (0xff000000 | (0хс0 « 16) | (0х00 « 8) | 0х00);

Color darkRed = new Color(newRed);

И последний конструктор, Color (float, float, float) , принимает три значения с плавающей точкой (в диапазоне от 0,0 до 1,0), указывающие относительные значения смеси красного, зеленого и синего.

 

9.7.1 Методы Color

Класс Color определяет несколько методов, помогающих манипулировать цветами. Рассмотрим их.

1) Использование цвета, насыщенности и яркости

Цветовая модель "цвет-насыщенность-яркость" (hue-saturation-brightness - HSB) представляет собой альтернативу модели "красный-зеленый-синий" (red-green-blue - RGB) для указания определенного цвета. Образно говоря, цвет в модели HSB представляет собой цветовой круг. Он задается числом в диапазоне от 0,0 до 1,0 (приближенно образуя радугу, состоящую из красного, оранжевого, желтого, зеленого, синего, индиго и фиолетового). Насыщенность - вторая шкала в диапазоне от 0,0 до 1,0, представляет примеси для интенсификации цвета. Значения яркости также лежат в диапазоне от 0,0 до 1,0, где 1 – ярко-белый, а 0 - черный. Color поддерживает два метода, позволяющие выполнять преобразования между RGB и HSB; методы показаны ниже.

static int HSBtoRGB(float hue, float saturation, float brightness)

static float[ ] RGBtoHSB(int red, int green, int blue, float values[ ])

HSBtoRGB() возвращает упакованное значение RGB, совместимое с конструктором Color(int). RGBtoHSB() возвращает массив чисел с плавающей точкой, представляющих значения HSB, соответствующие составляющим RGB. Если values не равно null, то этот массив представляет заданные значения HSB и возвращается. В противном случае создается новый массив, и значения HSB возвращаются в нем. В любом случае массив содержит цвет в элементе с индексом 0, насыщенность в элементе 1 и яркость - в элементе 2.

2) getRed(), getGreen(), getblue()

Вы можете получить красную, зеленую и синюю составляющие цвета независимо, используя для этого методы getRed (), getGreen () и getBlue (), показанные ниже:

int getRed ()

int getGreen ()

int getBlue ()

Каждый из этих методов возвращает компонент цвета RGB, извлеченный из вызывающего объекта Color в нижних 8 битах целого числа.

3) getRgb ( )

Чтобы получить упакованное RGВ-представление цвета, предусмотрен метод getRed ( ) , показанный ниже:

int getRGB ()

Возвращаемое значение организовано, как было описано выше.

4) Установка текущего цвета графики

По умолчанию графические объекты рисуются текущим цветом переднего плана. Вы можете изменить этот цвет вызовом метода setColor() класса Graphics:

void setColor(Color newColor)

Здесь newColor специфицирует новый цвет рисования.

Вы можете получить текущий установленный цвет, вызвав метод getColor() , показанный ниже:

Co1or getCo1or ( )

Следующий аплет конструирует несколько цветов и рисует различные объекты, используя эти цвета:

// Демонстрация цветов.

import java.awt.*;

import java.applet.*;

/*

<applet code = "Co1orDemo" width = 300 height = 200>

</applet>

*/

public class ColorDemo extends Applet

// рисование линий

public void paint(Graphics g) {

Co1or с1 = new Color(255, 100, 100);

Color с2 = new Color(100, 255, 100);

Co1or с3 = new Color(100, 100,255);

g.setColor(c1);

g.drawLine(0, 0, 100, 100);

g.drawLine(0, 100, 100, 0);

g.setColor(c2);

g.drawLine(40, 25, 250, 180);

g.drawLine(75, 90, 400, 400);

g.setColor(c3);

g.drawLine(20, 150, 400, 40);

g.drawLine(5, 290, 80, 19);

g.setColor(Color.red);

g.drawOval(10, 10, 50, 50);

g.fillOval(70, 90, 140, 100);

g.setColor(Color.blue);

g.drawOval(190, 10, 90, 30);

g.drawRect(10, 10, 60, 50);

g.setColor(Color.cyan);

g.fillRect(100, 10, 60, 50);

g.drawRoundRect(190, 10, 60, 50, 15, 15);

}

}

 

 




Поиск по сайту:

©2015-2020 studopedya.ru Все права принадлежат авторам размещенных материалов.