Создание меню
Затем определяем каждое выпадающее меню, создавая его пункты. Каждый пункт меню – это объект класса Menuitem. Схема его создания и добавления к меню точно такая же, как и самого меню:
Menuitem create = new Menuitem("Создать"); mFile.add(create); Menuitem open = new Menuitem("Открыть…"); mFile.add(open);
…и т. д. Пункты меню будут расположены сверху вниз в порядке обращения к методам add().
Часто пункты меню объединяются в группы. Одна группа от другой отделяется горизонтальной чертой. На рис. 13.1 черта проведена между командами Открыть и Отправить. Эта черта создается методом addseparator () класса Menu или определяется как пункт меню с надписью специального вида – дефисом:
mFile.addfnew Menuitem("-"));
Интересно, что класс Menu расширяет класс Menuitem, а не наоборот. Это означает, что меню само является пунктом меню, и позволяет задавать меню в качестве пункта другого меню, тем самым организуя вложенные подменю:
Menu send = new Menu("Отправить"); mFile.add(send);
Здесь меню send добавляется в меню mFile как один из его пунктов. Подменю send заполняется пунктами меню как обычное меню.
Часто команды меню создаются для выбора из них каких-то возможностей, подобно компонентам checkbox. Такие пункты можно выделить щелчком кнопки мыши или отменить выделение повторным щелчком. Эти команды – объекты класса CheckboxMenuItem:
CheckboxMenuItem disk = new CheckboxMenuItem("Диск A:", true); send.add(disk); send.add(new CheckboxMenuItem("Архив")); и т.д.
Все, что получилось в результате перечисленных действий, показано на рис. 13.1.
Многие графические оболочки, но не MS Windows, позволяют создавать отсоединяемые (tear-off) меню, которые можно перемещать по экрану. Это указывается в конструкторе:
Menu(String label, boolean tearOff)
Если tearoff == true и графическая оболочка умеет создавать отсоединяемое меню, то оно будет создано. В противном случае этот аргумент просто игнорируется.
Наконец, надо назначить действия командам меню. Команды меню типа Menuitem порождают события типа ActionEvent, поэтому нужно присоединить к ним объект класса-слушателя как к обычным компонентам, записав что-то вроде:
create.addActionListener(new SomeActionEventHandler()) open.addActionListener(new AnotherActionEventHandler())
Пункты типа CheckboxMenuItem порождают события типа ItemEvent, поэтому надо обращаться к объекту-слушателю этого события:
disk.addltemListener(new SomeltemEventHandler())