Обработка событий меню.

Когда пользователь выбирает одну из команд меню, происходит генерация соответствующего события. При этом вызывается метод action() контейнера. Каждый элемент меню создает свое индивидуально событие, так что, переопределив метод action(), всегда можно однозначно сказать, какой элемент меню в каком меню был выбран.Можно проверить, является ли элемент, создавший событие экземпляром класса MenuItem, и если так, то можно использовать аргумент arg типа Object события, чтобы извлечь имя выбранного элемента меню. Допустим, что панель меню состоит из меню "File", в которое входят элементы "New" и "Exit". Тогда метод action() контейнера, содержащего эту панель меню, можно переопределить следующим образом:

public boolean action(Event evt, Object obj)

{

// обработка событий от элементов меню

if(evt.target instanceof MenuItem) // объект является элементом меню?

{ // получаем название/метку элемента меню

String label=(String)evt.arg;

// проверка, от какого именно элемента пришло событие

if(label.equals("New")) // от элемента с меткой "New"?

{ // обработка события от элемента с меткой "New"

............................................... }

else if(label.equals("Exit")) // от элемента с меткой "Exit"?

{ // обработка события от элемента с меткой "Exit"

............................................... }

else

{ // если событие вызвано элементом, обработчик

// которого не предусмотрен в данном методе

return false; }

// если событие обработано, иначе return false

return true; }

// необработанные события передаем на дальнейшую обработку

return false; }

Для обработки событий от меню можно переопределять не только метод action(). Вместо переопределения метода action() можно переопределить более универсальный обработчик событий handleEvent():

public boolean handleEvent(Event evt)

{ switch(evt.id)

{ default:// передача сообщения на обработку

// методу базового класса

return super.handleEvent(evt);

case Event.ACTION_EVENT:

// обработка событий от элементов меню

if(evt.target instanceof MenuItem)

{ // получаем название/метку элемента меню

String label=(String)evt.arg;

// проверка, от какого элемента пришло событие

if(label.equals("New"))

{ // обработка события

................................... }

else if(label.equals("Exit"))

{ // обработка события

..................... }

else

{ // если событие вызвано элементом,

// обработчик которого не

// предусмотрен в данном методе

return false; }

// если событие обработано, иначе return false

return true; }

break; }

return true; }

Диалоги

Кроме окон и фреймов есть особый подкласс окон, называемый диалоговыми окнами или просто диалоги. В отличие от фреймов или обычных окон диалог предоставляет пользователю окно, в котором нужно выполнить те или иные действия, лишь по завершении которых пользователь сможет продолжить работу с программой.