Вы находитесь на странице: 1из 12

АПРОБАЦИЯ

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


федерального государственного автономного образовательного учреждения
высшего профессионального образования
«Национальный исследовательский ядерный университет «МИФИ»

РАБОТА С ГРАФИЧЕСКИМИ ОБЪЕКТАМИ НА ЯЗЫКЕ 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
Рис. 12. Индивидуальные задания.

Вопросы для самоконтроля


1. Что такое наследование в классах?
2. Как работает переопределение методов в наследуемых классах?
3. Какая аннотация отвечает за переопределение метода в Java?
4. Какие параметры передаются в метод paint при его вызове?
5. Какие переменные называют полями или свойствами класса?
6. Что такое инкапсуляция?
7. Перечислите основные методы для рисования графических при-
митивов в Java.
8. Как добавить элемент в контейнер в Java?

11
9. Опишите работу с блоком прослушивания события нажатия на
клавиатуру.
10. Для каких целей используется метод repaint?

12