Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
Для обработки событий всегда выполняется следующие шаги:
1. зарегистрируйте блок прослушивания событий;
2.
3. реализуйте соответствующий интерфейс в блоке прослушивания, чтобы он принимал события желаемого типа;
4. реализуйте код в блоке прослушивания для всех методов интерфейса.
Второй вариант)
Каждый интерфейс, включаемый в блок прослушивания, наследуется от интерфейса EventListener и предназначен для обработки определенного типа событий. При этом он содержит один или несколько методов, которые всегда принимают объект события в качестве единственного параметра и вызываются в определенных ситуациях. В таблице приведены некоторые интерфейсы и их методы, которые должны быть реализованы в классе прослушивания событий, реализующем соответствующий интерфейс:
Интерфейсы | Обработчики события |
ActionListener | actionPerformed(ActionEvent e) |
AdjustmentListener | adjustmentValueChanged( AdjustmentEvent e) |
ComponentListener | componentResized( ComponentEvent e) componentMoved(ComponentEvent e) componentShown(ComponentEvent e) componentHidden(ComponentEvent e) |
ContainerListener | componentAdded(ContainerEvent e) componentRemoved( ContainerEvent e) |
FocusListener | focusGained(FocusEvent e) focusLost(FocusEvent e) |
ItemListener | itemStateChanged(ItemEvent e) |
KeyListener | keyPressed(KeyEvent e) keyReleased(KeyEvent e) keyTyped(KeyEvent e) |
MouseListener | mouseClicked(MouseEvent e) mousePressed(MouseEvent e) mouseReleased(MouseEvent e) mouseEntered(MouseEvent e) mouseExited(MouseEvent e) |
MouseMotionListener | mouseDragged(MouseEvent e) mouseMoved(MouseEvent e) |
TextListener | textValueChanged(TextEvent e) |
WindowListener | windowOpened(WindowEvent e) windowClosing(WindowEvent e) windowClosed(WindowEvent e) windowIconified(WindowEvent e) windowDeiconified(WindowEvent e) windowActivated(WindowEvent e) |
Событие, которое генерируется в случае возникновения определенной ситуации и затем передается зарегистрированному блоку прослушивания для обработки, – это объект класса событий. В корне иерархии классов событий находится суперкласс EventObject из пакета java.util. Этот класс содержит два метода: getSource(), возвращающий источник событий, и toString(), возвращающий строчный эквивалент события. Абстрактный класс AWTEvent из пакета java.awt является суперклассом всех AWT-событий, связанных с компонентами. Метод getID() определяет тип события, возникающего вследствие действий пользователя в визуальном приложении. Ниже приведены некоторые из классов событий, производных от AWTEvent, и расположенные в пакете java.awt.event:
ActionEvent – генерируется: при нажатии кнопки; двойном щелчке клавишей мыши по элементам списка; при выборе пункта меню;
AdjustmentEvent – генерируется при изменении полосы прокрутки;
ComponentEvent – генерируется, если компонент скрыт, перемещен, изменен в размере или становится видимым;
FocusEvent – генерируется, если компонент получает или теряет фокус ввода;
TextEvent – генерируется при изменении текстового поля;
ItemEvent – генерируется при выборе элемента из списка.
Класс InputEvent является абстрактным суперклассом событий ввода (для клавиатуры или мыши). События ввода с клавиатуры обрабатывает класс KeyEvent, события мыши – MouseEvent.
40. Классы – адаптеры.
Adapter используется для того, чтобы объекты с разными интерфейсами могли работать друг с другом. Существует два типа адаптеров - Class Adapter и Object Adapter.
Для начала мы рассмотрим каждый из этих типов, а потом я объясню разницу между двумя wrapper’ами - адаптером и фасадом.
Object Adapter достигает своей цели с помощью композиции. На диаграмме, представленной ниже, клиенту требуется использовать интерфейс TargetInterface. Для этого создается класс ObjectAdapter, который реализует интерфейс TargetInterface, а также хранит объект класса Adaptee. При вызове метода targetMethod у Адаптера, осуществляется вызов соответствующего метода у адаптируемого интерфейса.
В самом простом случае реализация ObjectAdapter будет такой:
public class ObjectAdapter implements TargetInterface {
private Adaptee adaptee;
public void targetMethod() {
adaptee.method()
}
}
Плюс такого подхода в том, что мы полностью отделяем клиентский интерфейс от адаптируемого интерфейса.
В случае с Class Adapter’ом, для достижения нашей цели используется множественное наследование. Наш ClassAdapter наследуется от клиентского интерфейса и от Адаптируемого интерфейса. Так как в Java нет множественного наследования, то только один из предков может быть абстрактным/конкретным классом.
Вот тривиальная реализация класса ClassAdapter:
public class ClassAdapter extends Adaptee
implements TargetInterface {
public void targetMethod() {
method();
}
}
Class Adapter считается более простым решением в случае когда не требуется жесткого разделения клиентского и адаптируемого интерфейсов.
Дата публикования: 2015-02-03; Прочитано: 390 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!