Иллюстрированный самоучитель по Java

Создание меню

Затем определяем каждое выпадающее меню, создавая его пункты. Каждый пункт меню – это объект класса 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())
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.