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

2к4с Объектно-ориентированное программирование - КР / ООП / 1642758173_МУ практическая часть к КР

.pdf
Скачиваний:
3
Добавлен:
27.11.2024
Размер:
1.08 Mб
Скачать

АПРОБАЦИЯ

Балаковский инженерно-технологический институт — филиал федерального государственного автономного образовательного учреждения высшего профессионального образования

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

РАБОТА С ГРАФИЧЕСКИМИ ОБЪЕКТАМИ НА ЯЗЫКЕ JAVA

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

«Объектно-ориентированное программирование» для студентов всех форм обучения по направлению 09.03.02

Одобрено редакционно-издательским советом Балаковского инженерно-

технологического института

Балаково 2015

Введение

Цель работы: изучение возможностей создания графических изобра-

жений при помощи метода 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

|

+---java.awt.Container

|

+---java.awt.Panel

2

|

+---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 и окна апплета обычно вы-

полняется асинхронно по отношению к работе приложения или апплета. В

любой момент времени апплет должен быть готов перерисовать содержи-

мое своего окна.

Такая техника отличается о той, к которой вы, возможно, привыкли,

создавая обычные программы для MS-DOS. Программы MS-DOS сами определяют, когда им нужно рисовать на экране, причем рисование может выполняться из разных мест программы. Апплеты, так же как и приложе-

3

ния 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. Второй и третий параметр определяют,

соответственно, координаты точки, в которой начнется рисование строки.

Апплеты используют систему координат, которая соответствует ре-

жиму отображения MM_TEXT, знакомому тем, кто создавал приложения

Windows. Начало этой системы координат расположено в левом верхнем углу окна апплета, ось X направлена слева направо, а ось Y - сверху вниз

(рис. 1).

4

Рис. 1. Система координат, используемая методом drawString.

На этом же рисунке показано, как метод drawString нарисует тексто-

вую строку с координатами (xCoord, yCoord).

Технология выполнения работы

1.Создать оконное приложение при помощи jFrame.

2.Создать новый класс и сделать его наследником класса Panel.

3.Создать поля, отвечающие за размеры геометрических фигур, по индивидуальному заданию (рис. 2).

4.Произвести инкапсуляцию полей.

5.Переопределить метод paint() в соответствии с индивидуальным заданием.

6.Добавить контейнер с собственной панелью на фреймовое окно.

7.Реализовать блок прослушивания события нажатия на клавиату-

ру.

8.Реализовать движение геометрических фигур при нажатии на клавиатуру.

9.Ограничить движение геометрических фигур фреймовым окном.

Пример выполнения

1. Создать оконное приложение при помощи jFrame.

5

Рисунок 2 - Созданное оконное приложение при помощи jFrame

2. Создать новый класс и сделать его наследником класса Panel.

Рисунок 3 - Созданный новый класс MyPanel, который является наследни-

ком класса Panel

3. Создать поля, отвечающие за размеры геометрических фигур.

6

Рисунок 4 - Созданные поля, отвечающие за размеры геометриче-

ских фигур

4. Произвести инкапсуляцию полей.

Рисунок 5 - Инкапсуляция полей

7

Рисунок 6 - Реорганизация кода

5. Переопределить метод paint() в соответствии с индивидуальным заданием.

Рисунок 7 - Метод paint() в соответствии с индивидуальным задани-

ем

8

6. Добавить контейнер с собственной панелью на фреймовое окно.

Рисунок 8 - Контейнер с собственной панелью

7. Реализовать блок прослушивания события нажатия на клавиатуру.

Рисунок 9 - Создание блока прослушивания события нажатия на кла-

виатуру

8. Сгенерировать код блока прослушивания события при нажатии на клавиатуру.

9

Рисунок 10 - Сгенерированный код блока прослушивания события нажатия на клавиатуру

9. Реализовать движение геометрических фигур при нажатии на кла-

виатуру. Ограничить движение геометрических фигур фреймовым окном.

Рисунок 11 - Движение геометрических фигур при нажатии на кла-

виатуру, ограниченное фреймовым окном

10