Московский государственный университет имени М.В.Ломоносова
Опубликован: 01.11.2004 | Доступ: свободный | Студентов: 10569 / 333 | Оценка: 4.12 / 4.01 | Длительность: 19:18:00
ISBN: 978-5-9556-0077-9
Специальности: Программист
Лекция 26:

Библиотека классов JDK. Основы построения интерфейса пользователя на языке Java. События

< Лекция 25 || Лекция 26: 1234 || Лекция 27 >

Методы - обработчики событий

События окна

Методы - обработчики событий окна объявляются в интерфейсе WindowListener. Для данного интерфейса существует класс адаптер WindowAdapter.

Для того чтобы отслеживать все события окна, можно создать класс окна, наследуемый от интерфейса WindowListener.

Например:

public class MyWindowListener extends Frame 
                                implements WindowListener 
{
public void windowClosing(WindowEvent e) { }
public void windowClosed(WindowEvent e) { }
public void windowOpened(WindowEvent e) { }
public void windowIconified(WindowEvent e) { }
public void windowDeiconified(WindowEvent e) { }
public void windowActivated(WindowEvent e) { }
public void windowDeactivated(WindowEvent e) { }
}

Если надо отслеживать все события окна приложения или апплета, то блок прослушивания следует добавить для объекта this/.

Например:

addWindowListener(this);

Если надо отслеживать все события окна, создаваемого в процессе выполнения приложения или апплета, то сначала надо создать объект "окно", а затем добавить для него блок прослушивания.

Например:

myFrame = new Frame("Заголовок окна");
myFrame.addWindowListener(this);

Интерфейс WindowListener объявляет следующие методы, вызываемые для события WindowEvent:

  • WindowActivated - метод обработки события, вызываемый при активизации окна пользователем.
  • WindowClosed - метод обработки события, вызываемый при закрытии окна вследствии вызова метода dispose(), который освобождает ресурсы экрана.
  • WindowClosing - метод обработки события, вызываемый при закрытии окна пользователем с помощью системного меню.
  • WindowDeactivated - метод обработки события, вызываемый при потери окном фокуса.
  • windowDeiconified - метод обработки события, вызываемый при изменении состояния окна из свернутого в нормальное.
  • windowIconified - метод обработки события, вызываемый при изменении состояния окна из нормального в свернутое.
  • windowOpened - метод вызывается один раз при открытии окна.

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

Методы обработчики событий от клавиатуры объявляются в интерфейсе KeyListener, для которого существует класс адаптер KeyAdapter.

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

Интерфейс KeyListener объявляет следующие методы обработчики для события KeyEvent:

o	void keyTyped(KeyEvent e);		// Ввод символа
o	void keyPressed(KeyEvent e); 		// Нажатие клавиши
o	void keyReleased(KeyEvent e)		// Отпускание клавиши

Для получения информации о коде нажатой клавиши следует использовать методы класса KeyEvent.

Класс KeyEvent определен в иерархии классов Java следующим образом:


При нажатии или отпускании клавиши метод getKeyCode возвращает значение кода нажатой клавиши.

Метод getKeyChar возвращает значение символа Unicode или CHAR_UNDEFINED.

При обработке события ввода (метод void keyTyped(KeyEvent e) ) можно получить значение введенного с клавиатуры символа в формате Unicode или CHAR_UNDEFINED.

Клавиатурные комбинации обрабатываются в методах:

  • void keyPressed(KeyEvent e) и
  • void keyReleased(KeyEvent e)

Например, нажатие клавиш Shift+B можно отследить в методе keyPressed (событие KEY_PRESSED ): при первом вызове метода будет возвращен код клавиши Shift - VK_SHIFT, а при втором вызове метода - код клавиши B - VK_B. И только затем произойдет вызов метода keyTyped.

На следующей схеме приведен алгоритм обработки событий от клавиатуры.

Нажатая клавиша Вызываемые методы обработки события Методы класса KeyEvent,используемые для получения информации Возвращаемое методом значение
Shift+A keyPressed getKeyChar()

getKeyCode()

getModifiers()

символ = ' '

код = 16 (Shift)

модификатор = 1

keyPressed getKeyChar()

getKeyCode()

getModifiers()

символ ='B'

код = 66(B)

модификатор = 1

keyTyped getKeyChar()

getKeyCode()

getModifiers()

символ ='B'

код = 0

модификатор = 0

keyReleased getKeyChar()

getKeyCode()

getModifiers()

символ ='A'

код = 66(B)

модификатор = 0

keyReleased getKeyChar()

getKeyCode()

getModifiers()

символ = ' '

код = 16 (Shift)

модификатор = 0

В классе KeyEvent определены виртуальные коды для всех клавиш клавиатуры. К таким кодам относятся:

  • Коды цифр: от VK_0 до VK_9 ( ASCII-коды цифр от '0' до '9' (0x30 - 0x39)).
  • Коды букв: от VK_A до VK_Z (ASCII-коды букв от 'A' до 'Z' (0x41 - 0x5A)).
  • Коды NUMPAD-клавиатуры: от VK_NUMPAD0 до VK_NUMPAD9.
  • Коды управляющих и функциональных клавиш: от VK_F1 до VK_F24, VK_NUM_LOCK, VK_PRINTSCREEN, VK_INSERT, VK_HELP, VK_DELETE, VK_ENTER, VK_BACK_SPACE, VK_TAB, VK_CANCEL, VK_CAPS_LOCK, VK_ESCAPE, VK_SPACE, VK_PAUSE.
  • Коды перемещения позиции: VK_PAGE_UP, VK_PAGE_DOWN, VK_END, VK_HOME, VK_LEFT, VK_UP, VK_RIGHT, VK_DOWN.
  • Коды-модификаторы: VK_SHIFT, VK_ALT, VK_CONTROL.
  • Коды символов: VK_DOLLAR, VK_COMMA, VK_MINUS, VK_PERIOD, VK_SLASH, VK_SEMICOLON, VK_EQUALS, VK_OPEN_BRACKET (открывающая скобка), VK_BACK_SLASH (обратный слэш), VK_CLOSE_BRACKET (закрывающая скобка).

Класс KeyEvent содержит следующий набор методов, предназначенных для определения кодов нажатых клавиш:

  • GetKeyChar - возвращает символ Unicode, соответствующий нажатой клавиши, с учетом регистра и языка клавиатуры.
  • GetKeyCode - возвращает код нажатой клавиши.
  • GetKeyModifiersText - возвращает строку, содержащую описание кода-модификатора (например, "Ctrl+Shift").
  • GetKeyText - возвращает строку, содержащую описание кода (например, "F1", "PageUp" или "D").
  • IsActionKey - определяет, была ли нажата клавиша action-ключа, такая, как PGUP, PGDN, F1, F2 и т.п.
  • ParamString - возвращает строку параметров, определяющих данное событие.
  • SetKeyChar - устанавливает значение, равное значению символа Unicode.
  • SetKeyCode - устанавливает значение, равное значению кода клавиши.
  • SetModifiers - устанавливает значение кода модификатора.
  • SetSource - определяет источник события KeyEvent.

Наряду с описанными методами, можно использовать методы, наследуемые от класса java.awt.event.InputEvent, включая следующие:

  • boolean isAltDown() // Нажата клавиша Alt
  • boolean isShiftDown() // Нажата клавиша Shift
  • boolean isControlDown() // Нажата клавиша Ctrl
< Лекция 25 || Лекция 26: 1234 || Лекция 27 >
Александр Демьяненко
Александр Демьяненко

Можно ли сдавать один и тот же тест несколько раз?
Или же один и тот же тест можно сдать лишь однажды?

Максим Стогний
Максим Стогний

Добрый день!

Скажите, пожалуйста, если в терминологии объектно-ориентированного программирования функции также называются методами или методами - членами класса, в примере объявления указателя на метод использовали в формальном описании оба названия:

тип_метода (имя_класса::*имя_метода_указателя)
    (список параметров);
тип_функции (*имя_ функции_указателя)
    (список параметров);

при этом можно было  тип_функции во втором описании заменить на тип_метода? Т.е.:

тип_метода (*имя_ метода_указателя)
    (список параметров);

Андрей Панков
Андрей Панков
Россия, г. Челябинск, Южно-Уральский государственный университет, 2012
Андрей Шулин
Андрей Шулин
Россия, Усть-илимск