Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Metodichka_Po_Tp.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.44 Mб
Скачать

2.4 События от клавиатуры

Апплет может обрабатывать события, создаваемые клавиатурой. Он может реагировать на нажатие и отпускание функциональных клавиш F1 - F12, клавиш перемещения курсора, обычных клавиш.

Для того, чтобы обработать события от клавиатуры, апплет должен переопределить методы keyDown() и keyUp():

public boolean keyDown(Event evt,int nkey);

public boolean keyUp(Event evt,int nkey);

Первый параметр этих функция - объект класса Event, который несет всю информацию о событии. Наибольший интерес представляют элементы key и modifiers переменной evt. Через них передается соответственно код нажатой клавиши и код модификации.

Второй параметр key методов keyDown() и keyUp() дублирует элемент key объекта evt.

Замечание. Прежде чем апплет будет способен принимать события от клавиатуры, ему нужно передать фокус ввода. Это можно сделать, щелкнув в окне левой клавишей мыши. Фокус ввода - это атрибут, который присваивается окну, обрабатывающему события от клавиатуры. Так как клавиатура одна, а апплетов и других активных мнокон на экране может быть много, необходим механизм, позволяющий определить, в какое окно направляется событие, создаваемое клавиатурой. Такой механизм и обеспечивается атрибутом фокуса ввода.

2.5 Приложение KeyCodes

Задание. Создать апплет двойного назначения KeyCodes, в окне которого отображаются символы, соответствующие нажимаемым клавишам, код соответствующей клавиши и коды модификации. В процессе отображения новые строки должны появляться в верхней части окна, а старые сдвигаться вниз после отпускания клавиши (должна быть организована свертка в окне).

Методические указания. Апплет должен быть создан на основе шаблонов, содержащихся в Приложении 4 (или при помощи системы Java Applet Wizard).

Объявление элементов класса апплета.

В классе апплета объявим следующие элементы:

int yHeight; // высота символов шрифта, выбранного по умолчанию

Dimension appSize; // текущий размер окна апплета

Инициализация апплета (метод init()).

При инициализации апплета в методе init() получим высоту символов шрифта для вывода текста в окно.

Для того, чтобы получить информацию о контексте окна апплета вне метода paint(), необходимо получить контекст отображения (методу paint() этот контекст передается через параметр). Получим этот контекст g класса Graphics методом апплета getGraphics() (cм. приложение LinesDraw).

Затем получим объект fm класса FontMetrics, который содержит метрики текущего шрифта, методом g.getFontMetrics() (приложение FontsList).

Сохраним высоту символов, выдаваемую методом fm.getHeight(), в переменной yHeight. Эта величина нужна для определения шага свертки.

Перерисовка окна апплета (метод paint()).

Для перерисовки изображения в окне используется метод paint(), которому передается объект g типа Graphics (g - контекст отображения для окна). Методами этого класса пользуются для вывода графической информации в окно апплета.

В данном апплете этот метод используется для определения текущего размера appSize окна и для закраски фона окна и рисовании рамки окна (см. приложение LinesDraw).

Обработка нажатия клавиши (метод keyDown()).

Переопределим в классе апплета метод-обработчик нажатия клавиши клавиатуры keyDown(). В этом методе будем выводить строку информации о нажатой клавише в верхней части окна. Сначала сформируем объект s класса String, равный

"Character "+(char)key+" -> Key "+key+" -> Modifiers "+evt.modifiers

затем получим методом getGraphics() контекст окна g класса Graphics и выведем в окно строку s в точке с координатами (10, yHeight) методом g.drawString().

Метод keyDown() должен возвратить true, так как обработка завершена.

Обработка отпускания клавиши (метод keyUp()).

Переопределим в классе апплета метод-обработчик отпускания клавиши клавиатуры keyUp().

Получим методом getGraphics() контекст окна g класса Graphics и с помощью метода g.copyArea() скопируем часть экрана, ограниченную прямоугольником с началом в точке (0, 1), шириной appSize.width-1 и высотой appSize.height-yHeight-5, в область с началом в точке (0, yHeight+1).

Затем методом g.setColor() выберем цвет фона Color.yellow и методом g.fillRect() закрасим область вывода очередной строки - прямоугольник с началом в точке (1, 1), шириной appSize.width-2 и высотой yHeight+1.

Метод keyUp() должен возвратить true, так как обработка завершена.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]