>{
>public void init()
>{
>int width = Integer.parseInt(getParameter("width"));
>int height = Integer.parseInt(getParameter("height"));
>Frame f = new Frame("Demo Frame");
>f.setSize(width, height);
>MenuBar mbar = new MenuBar();
>f. setMenuBar(mbar);
>Menu file = new Menu("Файл");
>file.add(new MenuItem("Новый..."));
>file.add(newMenuItem("Открыть..."));
>file.add(newMenuItem(“Закрыть”));
>file.add(new Menultem("-"));
>file.add(new MenuItem ("Выход..."));
>mbar.add(file);
>Menu edit = new Menu("Правка");
>edit.add(newMenuItem("Bырeзaть"));
>edit. add(new MenuItem("Копировать"));
>edit.add(newMenultem("Вставить"));
>edit.add(new Menultem("-"));
>Menu sub = new Menu("Специальное");
>sub.add(new MenuItem ("Первое"));
>sub.add(new MenuItem("Bтopoe"));
>sub. add(new Menultem("Третье"));
>edit.add(sub);
>edit.add(new CheckBoxMenuItem("Отладка"));
>edit.add(new CheckBoxMenuItem ("Тестирование"));
>mbar.add(edit);
>f.show();
>}
>}
12.16. Модель обработки событий от компонентов
Большая часть работы по написанию программ пользовательского интерфейса заключается в определении необходимых взаимодействий. Если операционная система определяет, что была нажата клавиша на клавиатуре или кнопка мыши, ее задача - уведомить об этом соответствующее приложение. Оно, в свою очередь, должно выяснить, какой из компонентов интерфейса связан с данным проявлением активности пользователя, и переслать сообщение ему. Модель обработки событий работает следующим образом. Каждый элемент взаимодействия между интерфейсом пользователя и программой определяется как событие. Классы приложений выясняют свою заинтересованность в некотором, ожидаемом определенным компонентом событии путем опроса компонента и выдачи ему предложения поместить в список сведения о его блоке прослушивания. Когда происходит некоторое событие, источник события уведомляет о нем все зарегистрированные блоки прослушивания.
Существует два различных типа событий - низкоуровневые и семантические. Низкоуровневые события связаны с физическими аспектами интерфейса пользователя - щелчками мыши, нажатиями клавиш клавиатуры и т.д. Семантические события строятся на базе низкоуровневых событий. Все низкоуровневые события являются подклассами класса ComponentEvent:
1. Containerevent. Возникает всякий раз, когда компонент добавляется или удаляется из контейнера;
2. FocusEvent. Предупреждает программу, что компонент получил или потерял фокус ввода;
3. InputEvent. Этот класс включает дополнительные подклассы KeyEvent и MouseEvent;
4. WindowEvent. Извещает программу, что пользователь воспользовался одним из системных элементов управления окна, например, кнопкой минимизации или кнопкой закрытия приложения.
К семантическим относятся следующие события:
1. ActionEvent. Уведомляет программу о выполнении специфического действия, связанного с некоторым компонентом (например, щелчка на кнопке);
2. AdjustmentEvent. Указывает, что было выполнено перемещение бегунка полосы прокрутки;
3. ItemEvent. Уведомляет программу, что пользователь измнил состояние переключателя, списка или флажка опции;
4. TextEvent. Возникает в том случае, когда пользователь изменяет текст в компонентах типа TextArea или TextField.
Все события, связанные с мышью, вызываются с копией оригинального события, а также с координатами х и у, в которых это событие произошло.
1. mouseEnter вызывается в том случае, когда мышь входит в компонент;
2. mouseExit вызывается при выходе мыши из области компонента;
3. mouseMove вызывается при перемещении мыши в области компонента;
4. mouseDown вызывается при нажатии кнопки мыши;
5. mouseDrag вызывается при перемещении мыши с нажатой кнопкой;
6. mouseUp вызывается при отпускании кнопки мыши.
Аналогично keyDown и keyUp вызываются при каждом нажатии и отпускании клавиши. Событие передается методу вместе с кодом нажатой клавиши. Событие можно проверить, чтобы посмотреть, нажаты ли в данный момент ка- кие-либо клавиши-модификаторы, для этой цели можно также пользоваться методами shiftDown, controlDown и metaDown. В классе Event определены десятки констант, позволяющих использовать символические имена, например, PGUP и