Создание меню и его элементов.

Создание панели меню и добавление ее в контейнер.

Контейнер может иметь главное меню или, как говорят, панель или строку меню. Главное меню создается на основе класса MenuBar.

Некоторые методы класса MenuBar:

· add - Добавляет меню (объект класса Menu) в данную панель меню

· countMenus - Определение количества меню в данной панели меню

· getMenu - Получение ссылки на меню

· remove - Удаление меню

· setHelpMenu - Установка меню Help

· getHelpMenu - Получение ссылки на меню Help

Для формирования главного меню создается объект класса MenuBar, а затем в него добавляются отдельные меню:

MenuBar mainMenu=new MenuBar(); // создание панели меню

Menu fileMenu=new Menu("File"); // создание меню "File"

Menu helpMenu=new Menu("Help"); // создание меню "Help"

После создания отдельных меню в них можно добавить элементы. Для этого нужно вызвать метод add() класса Menu:

fileMenu.add(new MenuItem("New")); // строка "New" меню "File"

fileMenu.addSeparator(); // горизонтальный разделитель

fileMenu.add(new MenuItem("Exit")); // строка "Exit" меню "File"

helpMenu.add(new MenuItem("Content")); // строка "Content" меню "Help"

helpMenu.add(addSeparator()); // горизонтальный разделитель

helpMenu.add(new MenuItem("About")); // строка "Content" меню " About "

Сформированные отдельные меню добавляются затем к панели меню при помощи метода add() класса MenuBar:

mainMenu.add(fileMenu); // добавить меню "File" в панель меню

mainMenu.add(helpMenu); // добавить меню "Help" в панель меню

Меню добавляются в панель слева направо в том порядке, в каком порядке происходят вызовы метода add() класса MenuBar. Класс MenuBar предоставляет интересную возможность присвоения одному из меню статуса «меню помощи», которая осуществляется следующим образом:

// присвоение меню "Help" статуса «меню помощи»

mainMenu.setHelpMenu(helpMenu);

Метод setHelpMenu() превращает меню helpMenu в меню помощи, перенося его в правый конец панели, отдельно от других меню. Следует обратить внимание, что, прежде чем вызывать метод setHelpMenu(), необходимо добавить это меню в панель меню.

И наконец, теперь можно установить главное меню окна фрейма:

setMenuBar(mainMenu); // установка главного меню окна

При создании меню необходимо реализовать класс Menu для каждого выпадающего меню и класс MenuItem (или его подкласс) для каждого элемента в этом меню.

Некоторые методы класса Menu:

· add - Добавляет элемент (объект класса MenuItem (строку или вложенное меню) или просто строку) в данное меню

· addSeparator - Добавляет горизонтальный разделитель

· countItems - Определение количества элементов в данном меню

· getItem - Получение ссылки на элемент меню

· remove - Удаление элемента меню

· isTearOff() - Проверка того, остается ли меню на экране после того, как пользователь отпустил клавишу мыши

Вот как выглядит объявление и создание нового меню:

Menu mn=new Menu("Operation");

Здесь создается меню с заголовком "Operation" и сохраняется ссылка на него в переменной mn. Есть еще одна интересная возможность - объявление «западающего меню». Это значит, что такое меню останется открытым даже после того, как кнопка мыши будет отпущена. «Западающее меню» создается с помощью следующего конструктора

new Menu("Operation",true);

Теперь создадим элемент cmd меню mn (команды включаются в меню в направлении сверху вниз):

MenuItem cmd=new MenuItem("Command"); // создание элемента cmd

mn.add(cmd); // добавление элемента cmd в меню mn

Так для доступа к пункту меню достаточно его заголовка, то эти два оператора можно объединить:

// добавление элемента "Command" в меню mn

mn.add(new MenuItem("Command"));

В меню можно добавлять не только команды, но и вложенные меню благодаря тому факту, что класс Menu является всего лишь расширением класса MenuItem:

// добавление вложенного меню в меню mn

mn.add(new Menu("Other menu inside mn"));

Классы элементов меню.

Класс MenuItem определяет поведение элементов меню. Пользуясь методами этого класса, можно блокировать или деблокировать отдельные элементы - это нужно делать, например, если в данный момент функция, соответствующая строке меню, недоступна или не определена. Можно также изменять текстовые строки, соответствующие элементам меню, что может пригодиться для переопределения их значения.

Некоторые методы класса MenuItem:

· disable - Блокирование элемента меню

· enable - Разблокирование элемента меню. Другая версия этого метода осуществляет блокировку и разблокировку по условию

· getLabel - Получение текстовой строки элемента меню

· isEnable - Проверка того, является ли элемент заблокированным

· setLabel - Установка текстовой строки элемента меню

Так как класс Menu является всего лишь расширением класса MenuItem, то объекты класса Menu также могут пользоваться методами класса MenuItem.

Специальный тип элемента меню - CheckBoxMenuItem, позволяет использовать элементы меню в качестве селекторов. Если элемент класса CheckBoxMenuItem выбран, то рядом с ним отображается пометка. Для получения состояния такого элемента используется метод getState(), а для установки его состояния - метод setState() класса CheckBoxMenuItem.