Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
3
Добавлен:
27.11.2024
Размер:
798.09 Кб
Скачать

АПРОБАЦИЯ

Балаковский инженерно-технологический институт - филиал

федерального государственного автономного образовательного

учреждения высшего образования

«Национальный исследовательский ядерный университет «МИФИ»

ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ

Методические указания к выполнению практических работ по дисциплине

«Объектно-ориентированное программирование»

для студентов всех форм обучения по направлению 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