
2к4с Объектно-ориентированное программирование - КР / ООП / 1605083330_МУ к ПР ООП
.pdfАПРОБАЦИЯ
Балаковский инженерно-технологический институт - филиал
федерального государственного автономного образовательного
учреждения высшего образования
«Национальный исследовательский ядерный университет «МИФИ»
ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ
Методические указания к выполнению практических работ по дисциплине
«Объектно-ориентированное программирование»
для студентов всех форм обучения по направлению 09.03.02
Балаково
Практическая работа №1.
Обработка пользовательских событий на языке Java.
Введение
Цель работы: знакомство с событиями воздействия на компонент манипуляциями мышью, вводом с клавиатуры, перемещением окна и из-
менением его размеров.
Основные понятия
От апплетов Java было бы немного толку, если бы они не умели об-
рабатывать информацию, поступающую от мыши и клавиатуры. К сча-
стью, такая обработка предусмотрена, и она выполняется достаточно про-
сто.
Когда пользователь выполняет операции с мышью или клавиатурой в окне апплета, возникают события, которые передаются соответствую-
щим методам класса Applet. Переопределяя эти методы, вы можете орга-
низовать обработку событий, возникающих от мыши или клавиатуры.
Если вы создавали приложения для операционной системы Microsoft Windows, здесь для вас нет ничего нового - вспомните, как вы обрабатыва-
ли сообщение WM_LBUTTONDOWN или WM_CHAR. Когда пользова-
тель выполнял действие с мышью или клавиатурой в окне приложения,
функция этого окна получала соответствующее сообщение. Методы класса
Applet, обрабатывающие события от мыши и клавиатуры, являются анало-
гами обработчиков указанных сообщений.
Заметим, что апплеты имеют дело только с левой клавишей мыши. В
текущей версии Java вы не можете никаким образом задействовать в ап-
плете правую или среднюю клавишу мыши.
2
Когда возникает событие, управление получает метод handleEvent из класса Component. Класс Applet является дочерним по отношению к классу
Component.
Прототип метода handleEvent представлен ниже:
public boolean handleEvent(Event evt);
В качестве параметра методу handleEvent передается объект класса
Event, который содержит всю информацию о событии. По содержимому полей класса Event вы можете определить координаты курсора мыши в момент, когда пользователь нажал клавишу, отличить одинарный щелчок от двойного и так далее.
Переопределив метод mouseDown, вы сможете отслеживать нажатия клавиши мыши. Прототип этого метода приведен ниже:
public boolean mouseDown(Event evt, int x, int
y);
Через параметр evt методу передается ссылка на объект Event, с по-
мощью которой метод может получить полную информацию о событии.
Анализируя содержимое параметров x и y, приложение может опре-
делить координаты курсора на момент возникновения события.
Заметим, что для отслеживания двойного щелчка мыши не преду-
смотрено никакого отдельного метода. Однако анализируя содержимое поля clickCount переменной evt, вы можете определить кратность щелчка мыши:
if(evt.clickCount > 1)
// Двойной щелчок showStatus("Mouse Double Click");
else
// Одинарный щелчок showStatus("Mouse Down");
3
При отпускании клавиши мыши управление получает метод
mouseUp:
public boolean mouseUp(Event evt, int x, int y);
Анализируя параметры x и y, вы можете определить координаты точки, в которой пользователь отпустил клавишу мыши.
Когда пользователь перемещает курсор мыши над окном апплета, в
процессе перемещения происходит вызов метода mouseMove:
public boolean mouseMove(Event evt, int x, int
y);
Через переменные x и y передаются текущие координаты курсора мыши.
Операция Drag and Drop выполняется следующим образом: пользо-
ватель нажимает клавишу мыши и, не отпуская ее, начинает перемещать курсор мыши. При этом происходит вызов метода mouseDrag:
public boolean mouseDrag(Event evt, int x, int
y);
Через переменные x и y передаются текущие координаты курсора мыши. Метод mouseDrag вызывается даже в том случае, если в процессе перемещения курсор вышел за пределы окна апплета.
Метод mouseEnter получает управление, когда курсор мыши в про-
цессе перемещения по экрану попадает в область окна апплета:
public boolean mouseEnter(Event evt, int x, int
y);
Вы можете использовать этот метод для активизации апплета, на ко-
торый указывает курсор мыши.
Метод mouseExit вызывается при покидании курсором окна апплета:
public boolean mouseExit(Event evt, int x, int
y);
4
Если пользователь убрал курсор из окна апплета, активизированного
методом mouseEnter, то метод mouseExit может переключить апплет в пас-
сивное состояние.
Технология выполнения работы
1.Создать консольное java-приложение.
2.Рассмотреть основные элементы управления ходом программы в
Java: вывод в консоль, объявление переменных, условные операторы и
циклы.
3.Создать фреймовое приложение на Java.
4.Добавить элементы управления SWING: кнопка и текстовое поле.
5.Рассмотреть свойства добавленных элементов.
6.Ознакомиться с блоком прослушивания события нажатия на кнопку клавиатуры.
7.Создать приложение, реализующее функции стандартного каль-
кулятора Windows.
Вопросы для самоконтроля
1.Опишите особенности языка и платформы Java.
2.Составьте классификацию программ по типу исполнения (компи-
лируемые, интерпретируемые, исполняемые на виртуальных машинах).
3.Опишите принцип работы виртуальной машины Java.
4.Опишите принцип JIT-компиляции.
5.Приведите пример создания простейшей программы на Java,
опишите процесс её компиляции в байт-код и запуск.
6.Перечислите основные средства разработки Java-приложений и интегрированные среды разработки.
7.Охарактеризуйте встроенные типы данных и способы задания литералов различных типов.
5
8.Опишите приведение типов (явное и автоматическое).
9.Охарактеризуйте константы и переменные.
10.Охарактеризуйте события в Java.
Время, отведенное на выполнение работы
Работа должна быть выполнена за два занятия – 4 часа.
Отчет сдается на последнем занятии.
6
Практическая работа №2.
Работа с графическими объектами на языке Java.
Введение
Цель работы: изучение возможностей создания графических изобра-
жений при помощи метода paint(), который выполняет рисование в окне апплета.
Основные понятия
Метод paint выполняет рисование в окне апплета. Вот его исходный
текст:
public void paint(Graphics g)
{
g.drawString("Hello, Java world!", 20, 20);
}
Если посмотреть определение класса Applet, которое находится в файле Java-Workshop20\JDK\src\java\applet\Applet.java, то в нем нет метода paint. В каком же классе определен этот метод?
Заглянем в документацию. Выберите из меню Help главного окна приложения Java WorkShop строку Java API Documentation. На экране по-
явится окно браузера, встроенного в Java WorkShop. С помощью этого браузера вы сможете просматривать содержимое справочной системы.
В разделе Java API Packages выберите библиотеку классов java.applet, а затем в разделе Class Index - строку Applet. Вы увидите иерархию классов:
java.lang.Object
|
+---java.awt.Component
|
7
+---java.awt.Container
|
+---java.awt.Panel
|
+---java.applet.Applet
Из этой иерархии видно, что класс java.applet.Applet произошел от класса java.awt.Panel. Этот класс, в свою очередь, определен в библиотеке классов java.awt и произошел от класса java.awt.Container.
Продолжим наши исследования. В классе java.awt.Container снова нет метода paint, но сам этот класс создан на базе класса java.awt.Component.
Но и здесь метода paint нет. Этот метод определен в классе java.awt.Component, который, в свою очередь, произошел от класса java.lang.Object и реализует интерфейс java.awt.image.ImageObserver.
Таким образом, мы проследили иерархию классов от класса java.applet.Applet, на базе которого создан наш апплет, до класса java.lang.Object, который является базовым для всех классов в Java.
Метод paint определен в классе java.awt.Component, но так как этот класс является базовым для класса Applet и для нашего класса HelloApplet,
мы можем переопределить метод paint.
Метод paint вызывается, когда необходимо перерисовать окно аппле-
та. Если вы создавали приложения для операционной системы Windows, то наверняка знакомы с сообщением WM_PAINT, которое поступает в функ-
цию окна приложения при необходимости его перерисовки.
Перерисовка окна приложения Windows и окна апплета обычно вы-
полняется асинхронно по отношению к работе приложения или апплета. В
любой момент времени апплет должен быть готов перерисовать содержи-
мое своего окна.
8
Такая техника отличается о той, к которой вы, возможно, привыкли,
создавая обычные программы для MS-DOS. Программы MS-DOS сами определяют, когда им нужно рисовать на экране, причем рисование может выполняться из разных мест программы. Апплеты, так же как и приложе-
ния Windows, выполняют рисование в своих окнах централизованно. Ап-
плет делает это в методе paint, а приложение Windows - при обработке со-
общения WM_PAINT.
Обратите внимание, что методу paint в качестве параметра передает-
ся ссылка на объект Graphics:
public void paint(Graphics g)
{
. . .
}
По своему смыслу этот объект напоминает контекст отображения, с
которым хорошо знакомы создатели приложений Windows. Контекст отображения - это как бы холст, на котором апплет может рисовать изоб-
ражение или писать текст. Многочисленные методы класса Graphics поз-
воляют задавать различные параметры холста, такие, например, как цвет или шрифт.
Наше приложение вызывает метод drawString, который рисует тек-
стовую строку в окне апплета:
g.drawString("Hello, Java world!", 20, 20);
Вот прототип этого метода:
public abstract void drawString(String str, int x, int y);
Через первый параметр методу drawString передается текстовая строка в виде объекта класса String. Второй и третий параметр определяют,
соответственно, координаты точки, в которой начнется рисование строки.
9

Апплеты используют систему координат, которая соответствует ре-
жиму отображения MM_TEXT, знакомому тем, кто создавал приложения
Windows. Начало этой системы координат расположено в левом верхнем углу окна апплета, ось X направлена слева направо, а ось Y - сверху вниз
(рис. 1).
Рис. 1. Система координат, используемая методом drawString.
На этом же рисунке показано, как метод drawString нарисует тексто-
вую строку с координатами (xCoord, yCoord).
Технология выполнения работы
1.Создать оконное приложение при помощи jFrame.
2.Создать новый класс и сделать его наследником класса Panel.
3.Создать поля, отвечающие за размеры геометрических фигур, по индивидуальному заданию (рис. 2).
4.Произвести инкапсуляцию полей.
5.Переопределить метод paint() в соответствии с индивидуальным заданием.
6.Добавить контейнер с собственной панелью на фреймовое окно.
7.Реализовать блок прослушивания события нажатия на клавиату-
ру.
8.Реализовать движение геометрических фигур при нажатии на клавиатуру.
9.Ограничить движение геометрических фигур фреймовым окном.
10