Создание меню и его элементов.
Создание панели меню и добавление ее в контейнер.
Контейнер может иметь главное меню или, как говорят, панель или строку меню. Главное меню создается на основе класса 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.