Главная » Просмотр файлов » И.Н. Блинов, В.С. Романчик - Основы программирования на языке Java

И.Н. Блинов, В.С. Романчик - Основы программирования на языке Java (1160783), страница 8

Файл №1160783 И.Н. Блинов, В.С. Романчик - Основы программирования на языке Java (И.Н. Блинов, В.С. Романчик - Основы программирования на языке Java) 8 страницаИ.Н. Блинов, В.С. Романчик - Основы программирования на языке Java (1160783) страница 82019-09-19СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 8)

Если существует заинтересованность только в событиях перетаскивания мыши,то можно просто расширить адаптер MouseMotionAdapter и реализовать метод mouseDragged(). Событие же перемещения мыши обрабатывала бы пустая реализация mouseMoved().Обработка событий Frame-окнаКогда происходит событие, связанное с окном, вызываются обработчики событий, определенные для этого окна. При создании оконного приложения используется метод main(), создающий для него окно верхнего уровня. После этого программа будет функционироватькак GUI-приложение, а не консольная программа. Программаподдерживается в работоспособном состоянии, пока не закрыто окно.В общем смысле окно является контейнером.

Графический контекст инкапсулирован в классе и получается двумя способами: вызовом методов paint(), update(); возвращается методом getGraphics()класса Component.Событие FocusEvent предупреждает программу, что компонентполучил или потерял фокус ввода. Класс InputEvent является суперклассом для классов KeyEvent и MouseEvent. Событие WindowEventизвещает программу, что пользователь воспользовался одним изсистемных элементов управления окна.Для создания графического интерфейса потребуется предоставитьместо (окно), в котором он будет отображаться.

При выполнении апплета за эти действия отвечает браузер. Если программа являетсяприложением, подобные действия она должна выполнять самостоятельно. Место, на котором рисуется пользовательский интерфейс, называют контейнером. Элементы интерфейса пользователя называюткомпонентами. Для создания графического интерфейса приложениянеобходимо предоставить ему объект Frame, в который будут помещаться используемые приложением компоненты GUI.46В следующем примере работа приложения начинается с методаmain(),вфункциикотороговходитсозданиеобъектаMyMouseWithFrame и передача ему управления.//пример #4 : применение адаптеров : MyMouseWithFrame.javaimport java.applet.*;import java.awt.*;import java.awt.event.*;public class MyMouseWithFrame extends Frame implementsActionListener{private Button button = new Button("кнопка");String msg = "";MyMouseWithFrame() {addMouseListener(new MyMouseAdapter(this));setLayout(null);setBackground(new Color(255, 0, 0));setForeground(new Color(0, 0, 255));button.setBounds(100, 100, 50, 20);button.addActionListener(this);add(button);}public static void main(String[] args) {MyMouseWithFrame myf = new MyMouseWithFrame();myf.addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {System.exit(0);};});myf.setSize(new Dimension(250, 200));myf.setTitle("Frame - окно");myf.setVisible(true);}public void paint(Graphics g) {g.drawString(msg, 80, 50);}public void actionPerformed(ActionEvent e) {msg = "кнопка нажата";repaint();}}class MyMouseAdapter extends MouseAdapter {47public MyMouseWithFrame mym;public MyMouseAdapter(MyMouseWithFrame mym) {this.mym = mym;}public void mousePressed(MouseEvent me) {mym.msg = "клавиша мыши нажата";mym.repaint();}public void mouseReleased(MouseEvent me){mym.msg = " клавиша мыши отпущена";mym.repaint();}}Конструктор класса MyMouseWithFrame использует методaddMouseListener(new MyMouseAdapter(this)) для регистрациисобытий "мыши".

При создании объекта класса MyMouseWithFrameэтот метод сообщает объекту, что он заинтересован в обработкеопределенных событий. Однако, вместо того, чтобы известить его обэтом прямо, конструктор организует посылку ему предупреждениячерез объект класса МуМоuseAdapter (только один тип событий).Абстрактный класс МоuseAdapter используется для обработки событий, связанных с "мышью" при создании блока прослушивания исодержит перегружаемые методы mousePressed(MouseEvent),mouseReleased(MouseEvent).Класс MyMouseWithFrame также обрабатывает событие классаWindowEvent.

Когда объект генерирует событие WindowEvent, объект MyMouseWithFrame анализирует, является ли оно событиемWindowClosing. Если это не так, объект MyMouseWithFrame игнорирует его. Если получено ожидаемое событие, в программе запускается процесс завершения ее работы.Упражнения1. Какое событие генерируется при попытке закрытия Frame-окна?2. Как оргагнизовать блок прослушивания с использованием адаптера?9. ГРАФИЧЕСКИЕ ИНТЕРФЕЙСЫ ПОЛЬЗОВАТЕЛЯОсновы оконной графикиПакет AWT (Abstract Windowing Toolkit) содержит набор классов, позволяющих выполнять графические операции, создавать такиеэлементы управления как кнопки, меню, окна и др.

СуперклассComponent является абстрактным классом, инкапсулирующим все ат48рибуты визуального компонента. Порожденный от него подклассContainer – содержит методы, которые позволяют вкладывать в негодругие компоненты (объекты) и отвечает за размещение любых компонентов, которые он содержит. Этот класс пораждает подклассыPanel и Window.

Класс Panel используется апплетами. Когда экранный вывод направляется к апплету, он рисуется на поверхности объекта Panel, окна, которое не содержит области заголовка, строки меню и обрамления. Kлacc Window (окно верхнего уровня) непосредственно не используется, а используется его подкласс Frame, которыйсоздает стандартное окно, имеющее строку заголовка, меню, изменяющиеся размеры. Класс Canvas не является подклассом Contanier,это пустое окно, в котором можно рисовать.Большинство графических операций – это методы классаGraphics.

Функции получают объект класса Graphics (графическийконтекст) в качестве параметра и вместе с ним получают текущийцвет, шрифт, положение курсора. Установку контекста обычно осуществляют методы update() или paint(). Рассмотрим несколько методов этого класса:drawLine (int x1, int y1, int x2, int y2) – рисует линию;drawRect(int x,int y,int width,int height) и fillRect (int x, int y, intwidth, int height) − рисуют прямоугольник и заполненный прямоугольник;draw3DRect(int x, int y, int width, int height, boolean raised) − рисует трехмерный прямоугольник;drawRoundRect(int x, int y, int width, int height, int arcWidth, intarcHeight) − рисует округленный прямоугольник;drawOval(int x, int y, int width, int height) − рисует овал;drawPolygon (int[] xPoints, int[] yPoints, int nPoints) − рисует полигон, заданный массивами координат x и y;drawPoiygon(Polygon p) − полигон, заданный объектом Polygon;drawPolyline(int[] xPoints, int[] yPoints, int nPoints) − рисует последовательность связных линий, заданных массивами x и y;drawArc(int x, int y, int width, int height, int startAngle, intarcAngle) − рисует дугу окружности;drawImage(Image img, int x, int y, Color bgcolor, ImageObserverobserver) − вставляет изображение;drawString(String str, int x, int y) − рисует строку;setColor(Color c), getColor() − устанавливает и возращает текущий цвет;49getFont() − возвращает текущий шрифт;setFont(Font font) − устанавливает шрифт в указанный.//пример #1 : вывод текста, линии и овалов : WindowApp.javaimport java.awt.*;import java.awt.event.*;public class WindowApp extends Frame{String msg = "Window-Application";int x1 = 30, y1 = 50, x2 = 200, y2 = 50;public WindowApp(){addWindowListener(new MyWindowAdapter());}//прослушиваниеpublic void paint(Graphics g){g.drawString(msg, 30, 40); //вывод строки с позиции х = 30 y = 40g.drawLine(x1, y1, x2, y2);//вывод линииint x = 30, y = 200, width = 150, height = 100;Color c = new Color(255, 100, 100);//установка красного цветаg.setColor(c);g.drawOval( x, y, width, height);//овалg.drawArc (x + 100, y + 50, width - 50, height, 0, 360);//сектор}public static void main(String args[]){WindowApp fr = new WindowApp();fr.setSize(new Dimension(500, 400)); //размер окнаfr.setTitle("awt-Application");fr.setVisible(true); //видимостьfr.repaint();} //перерисовка, вызов paint()}class MyWindowAdapter extends WindowAdapter{public void windowClosing(WindowEvent e){System.exit(0);}}//закрыть приложениеГрафические приложения в настоящее время используются довольно редко.

В большинстве случаев графика применяется в апплетах. Апплеты представляют классы языка Java, которые размещаютсяна серверах Internet, транспортируются клиенту по сети, автоматически устанавливаются и запускаются на месте как часть документаWWW. Апплеты позволяют вставлять в документы поля, содержаниекоторых меняется во времени, организовывать "бегущие строки",мультипликацию. Апплеты являются наследниками суперклассаApplet и его подкласса JApplet.

Есть несколько методов, которыеуправляют созданием и выполнением апплета на Web-странице. Перегружаемый метод init() автоматически вызывается для выполнения50начальной инициализации апплета. Метод start() вызывается каждыйраз, когда апплет переносится в поле зрения Web-браузера, чтобы начать операции. Метод stop() вызывается каждый раз, когда апплет выходит из поля зрения Web-браузера, чтобы позволить апплету завершить операции. Метод destroy() вызывается, когда апплет начинаетвыгружаться со страницы для выполнения финального освобожденияресурсов. Кроме этих методов автоматически загружаемым являетсяметод paint() класса Component.

Метод paint() не вызывается явно, атолько из других методов, например repaint().Рассмотрим пример апплета, в котором используются методыinit(), paint(), метод setColor() установки цвета символов, методdrawString() рисования строк.//пример #2 : вывод строк разными цветами: ColorConstants.javaimport java.applet.*;import java.awt.*;public class ColorConstants extends Applet {public void init(){ }public void paint(Graphics g) {g.setColor(Color.yellow);g.drawString("<желтый>", 5, 30);// желтым цветомg.setColor(Color.blue);g.drawString("<синий>", 5, 60);//синим цветомg.setColor(Color.green);g.drawString("<зеленый>", 5, 90);//зеленым цветом}}Апплету не нужен метод main(), код запуска помещается в init() иpaint().

После компиляции имя класса, содержащего байт-код апплетапомещается в тег <applet> ..</applet> документа HTML. Например:<html><applet code=ColorConstants.class width=500 height=500></applet></html>Исполнителем HTML-документа является браузер или AppletViewer.//пример #3 : передача параметров апплету : ReadParam.javaimport java.awt.*;import java.applet.*;public class ReadParam extends Applet{double a; int b; String name; boolean statement;public void start() {//чтение параметровString param;51name = getParameter("name");if(name == null)name = "No Name";param = getParameter("statement");if(param != null)statement = Boolean.valueOf(param).booleanValue();try {param = getParameter("aNumber");if(param != null) // если не найденb = Integer.parseInt(param);else b = 0;param = getParameter("bNumber");if(param != null) // если не найденa = Double.valueOf(param).doubleValue();else a = 1;} catch(NumberFormatException e) {a = 0; b = 0; statement = false;}}public void paint(Graphics g) {double d = 0;if(statement) d = Math.pow(a,b);else name = "ERROR !";g.drawString("Name: " + name, 0, 11);g.drawString("Value a: " + a, 0, 28);g.drawString("Value b: " + b, 0, 45);g.drawString("a power b: " + d, 0, 62);g.drawString("Statement: " + statement, 0, 79);}}Если параметр недоступен, getParameter() возвращает null.HTML-документ для этого примера может иметь вид:<html><head><title>Параметры апплета</title></head><body><applet code = ReadParam.class width = 250 height = 300><param name = name value ="Value of 'a' raised to the power of 'b'"><param name = aNumber value = 10><param name = bNumber value = 2><param name = statement value = true></applet></body> </html>52В примерах, приведенных ниже, демонстрируется использование методов класса Graphics для вывода графических изображений в окно апплета.//пример #4 : отображение полигона : DrawPoly.javaimport java.applet.*;import java.awt.*;public class DrawPoly extends Applet {int poly1_x[] = { 40, 80, 0, 40};int poly1_y[] = { 5, 45, 45, 5};int poly2_x[] = { 140, 180, 180, 140, 100, 100, 140};int poly2_y[] = { 5, 25, 45, 65, 45, 25, 5};int poly3_x[] = { 240, 260, 220, 260, 220, 240};int poly3_y[] = { 5, 65, 85, 25, 25, 5};public void paint(Graphics g) {g.drawPolygon(poly1_x, poly1_y, poly1_x.length);g.drawPolygon(poly2_x, poly2_y, poly2_x.length);g.drawPolygon(poly3_x, poly3_y, poly3_x.length);}}//пример #5 : трехмерный прямоугольник : ThreeDRect.javaimport java.applet.*;import java.awt.*;public class ThreeDRect extends Applet {public void draw3DRect(Graphics g, int x, int y,int width, int height, boolean raised) {g.draw3DRect(x, y, width - 1, height - 1, raised);g.draw3DRect(x + 1, y + 1, width - 3, height - 3, raised);g.draw3DRect(x + 2, y + 2, width - 5, height - 5, raised);}public void fill3DRect(Graphics g, int x, int y,int width, int height, boolean raised){ g.draw3DRect(x, y, width-1, height-1, raised);g.draw3DRect(x + 1, y + 1, width - 3, height - 3, raised);g.draw3DRect(x + 2, y + 2, width - 5, height - 5, raised);g.fillRect(x + 3, y + 3, width - 6, height - 6);}public void paint(Graphics g) {g.setColor(Color.gray);draw3DRect(g, 10, 5, 80, 40, true);draw3DRect(g, 130, 5, 80, 40, false);53fill3DRect(g, 10, 55, 80, 40, true);fill3DRect(g, 130, 55, 80, 40, false);}}//пример #6 : вывод в окно GIF-изображения : DrawImage.javaimport java.applet.*;import java.awt.*;public class DrawImage extends Applet {Image img;public void init() {img = getImage(getCodeBase(), "cow.gif"); }public void paint(Graphics g){ g.drawImage(img, 0, 0, this);}}//пример #7 : cоздание компонент AWT : AWTTest.javaimport java.applet.*;import java.awt.*;public class AWTTest extends Applet {Label label = new Label("объект Label"); //меткаButton button_a = new Button("кнопка"); //кнопкаCheckbox option_a = new Checkbox("яблоко"); //флажокpublic void init() { //добавлениеadd(label);add(button_a);add(option_a);}}В настоящее время при использовании управляющих компонентов в апплетах принято использовать интерфейсные классы, в которых компонент на экране создается средствами Java и в минимальной степени зависит от платформы и оборудования.

Характеристики

Тип файла
PDF-файл
Размер
705,51 Kb
Тип материала
Высшее учебное заведение

Список файлов книги

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6381
Авторов
на СтудИзбе
308
Средний доход
с одного платного файла
Обучение Подробнее