- •Лабораторная работа №5 Обработка событий в Swing
- •Теоретические сведения
- •Паттерн проектирования «наблюдатель»
- •Механизм обработки событий библиотеки Swing
- •Интерфейс MouseListener и обработка событий от мыши
- •Создание слушателей с помощью анонимных классов
- •Класс MouseAdapter
- •Общая структура слушателей
- •Слушатель колесика мышки MouseWheelListener
- •Слушатель клавиатуры KeyListener
- •Слушатель изменения состояния ChangeListener
- •Слушатель событий окна WindowListener
- •Слушатель фокуса FocusListener
- •Слушатель событий компонента СomponentListener
- •Слушатель выбора элемента ItemListener
- •Универсальный слушатель ActionListener
- •Работа с меню в библиотеке Swing
- •Создание главного меню
- •Обработка команд меню
- •Создание контекстного меню
- •Интерфейс Action (действие) и класс AbstractAction
- •Стандартные диалоговые окна Класс jOptionPane
- •Класс jFileChooser
- •Ход работы:
- •Контрольные вопросы:
Слушатель фокуса FocusListener
Слушатель FocusListener отслеживает моменты, когда объект получает фокус (то есть становится активным) или теряет его. Концепция фокуса очень важна для оконных приложений. В каждый момент времени в окне может быть только один активный (находящийся в фокусе) объект, который получает информацию о нажатых на клавиатуре клавишах (т. е. реагирует на события клавиатуры), о прокрутке колесика мышки и т.д. Пользователь активирует один из элементов управления нажатием мышки или с помощью клавиши Tab (переключаясь между ними).
Интерфейс FocusListener имеет два метода:
public void focusGained(FocusEvent event) – вызывается, когда наблюдаемый объект получает фокус
public void focusLost(FocusEvent event) – вызывается, когда наблюдаемый объект теряет фокус.
Слушатель колесика мышки MouseWheelListener
Слушатель MouseWheelListener оповещается при вращении колесика мыши в тот момент, когда данный компонент находится в фокусе. Этот интерфейс содержит всего один метод:
public void mouseWheelMoved(MouseWheelEvent event).
Слушатель клавиатуры KeyListener
Слушатель KeyListener оповещается, когда пользователь работает с клавиатурой в тот момент, когда данный компонент находится в фокусе. В интерфейсе определены методы:
public void mouseKeyTyped(KeyEvent event) – вызывается, когда с клавиатуры вводится символ
public void mouseKeyPressed(KeyEvent event) – вызывается, когда нажата клавиша клавиатуры
public void mouseKeyReleased(KeyEvent event) – вызывается, когда отпущена клавиша клавиатуры.
Аргумент event этих методов способен дать весьма ценные сведения. В частности, команда event.getKeyChar()возвращает символ типа char, связанный с нажатой клавишей. Если с нажатой клавишей не связан никакой символ, возвращается константа CHAR_UNDEFINED. Команда event.getKeyCode() возвратит код нажатой клавиши в виде целого числа типа int. Его можно сравнить с одной из многочисленных констант, определенных в классе KeyEvent: VK_F1, VK_SHIFT, VK_D, VK_MINUS и т.д. Методы isAltDown(), isControlDown(), isShiftDown() позволяют узнать, не была ли одновременно нажата одна из клавиш-модификаторов Alt, Ctrl или Shift.
Слушатель изменения состояния ChangeListener
Слушатель ChangeListener реагирует на изменение состояния объекта. Каждый элемент управления по своему определяет понятие «изменение состояния». Например, для панели с вкладками JTabbedPane это переход на другую вкладку, для ползунка JSlider – изменение его положения, кнопка JButton рассматривает как смену состояния щелчок на ней. Таким образом, хотя событие это достаточно общее, необходимо уточнять его специфику для каждого конкретного компонента. В интерфейсе определен всего один метод:
public void stateChanged(ChangeEvent event).
Слушатель событий окна WindowListener
Слушатель WindowListener может быть привязан только к окну и оповещается о различных событиях, произошедших с окном:
public void windowOpened(WindowEvent event) – окно открылось.
public void windowClosing(WindowEvent event) – попытка закрытия окна (например, пользователя нажал на крестик). Слово «попытка» означает, что данный метод вызовется до того, как окно будет закрыто и может воспрепятствовать этому (например, вывести диалог типа «Вы уверены?» и отменить закрытие окна, если пользователь выберет «Нет»).
public void windowClosed(WindowEvent event) – окно закрылось.
public void windowIconified(WindowEvent event) – окно свернуто.
public void windowDeiconified(WindowEvent event) – окно развернуто.
public void windowActivated(WindowEvent event) – окно стало активным.
public void windowDeactivated(WindowEvent event) – окно стало неактивным.
