узнает, например, о действии пользователя и может на него отреагировать.
Каждое событие является подклассом класса java.util.EventObject. События пакета AWT, которые и рассматриваются в данной лекции, являются подклассами java.awt.AWTEvent. Для удобства классы различных событий и интерфейсы слушателей помещены в отдельный пакет java.awt.event.
Прежде, чем углубляться в особенности событий, рассмотрим, как они применяются на практике, на примере простейшего события – ActionEvent.
Событие ActionEvent
Рассмотрим появление события ActionEvent на примере нажатия на кнопку.
Предположим, в нашем приложении создается кнопка сохранения файла:
Button save = new Button('Save'); add(save);
Теперь, когда окно приложения с этой кнопкой появится на экране, пользователь сможет нажать ее. В результате AWT сгенерирует ActionEvent. Чтобы получить и обработать его, необходимо зарегистрировать слушателя. Название нужного интерфейса прямо следует из названия события – ActionListener. В нем всего один метод (в некоторых слушателях их несколько), который имеет один аргумент – ActionEvent.
Объявим класс, который реализует этот интерфейс:
class SaveButtonListener implements ActionListener { private Frame parent; public SaveButtonListener(Frame parentFrame) { parent = parentFrame; } public void actionPerformed(ActionEvent e) { FileDialog fd = new FileDialog(parent, 'Save file', FileDialog.SAVE); fd.setVisible(true); System.out.println(fd.getDirectory()+'
Конструктор класса требует в качестве параметра ссылку на родительский фрейм, без которого не удастся создать FileDialog. В методе actionPerformed класса ActionListener описываются действия, которые необходимо предпринять по нажатию пользователем на кнопку. А именно, открывается файловый диалог, с помощью которого определяется путь сохранения файла. Для нашего примера достаточно вывести этот путь на консоль.
Следующий шаг – регистрация слушателя. Название соответствующего метода снова прямо следует из названия интерфейса – addActionListener.
save.addActionListener( new SaveButtonListener(frame));
Все необходимое для обработки нажатия пользователем на кнопку сделано. Ниже приведен полный листинг программы:
import java.awt.; import java.awt.event.*; public class Test { public static void main(String args[]) { Frame frame = new Frame('Test Action'); frame.setSize(400, 300); Panel p = new Panel(); frame.add(p); Button save = new Button('Save'); save.addActionListener( new SaveButtonListener(frame)); p.add(save); frame.setVisible(true); } } class SaveButtonListener implements ActionListener { private Frame parent; public SaveButtonListener(Frame parentFrame) { parent = parentFrame; } public void actionPerformed(ActionEvent e) { FileDialog fd = new FileDialog(parent, 'Save file', FileDialog.SAVE); fd.setVisible(true); System.out.println(fd.getDirectory()+ fd.getFile()); } }
После запуска программы появится фрейм с одной кнопкой 'Save'. Если нажать на нее, откроется файловый диалог. После выбора файла на консоли отображается полный путь к нему.
События AWT
Итак, для каждого события AWT определен класс XXEvent, интерфейс XXListener, а в компоненте- источнике событий – метод для регистрации слушателя addXXListener.
Совсем не обязательно, чтобы одно событие могло порождаться лишь одним компонентом как результат какого-то одного действия пользователя. Например, рассмотренный ActionEvent генерируется после нажатия на кнопку ( Button ), после нажатия клавиши Enter в поле ввода текста ( TextField ), при двойном щелчке мыши по элементу списка ( List ) и т.д.