Лабораторная работа: Сериализация объектов
send.add(disk);
send.add (new CheckboxMenuItem («Архив»));
и т.д.
Все, что получилось в результате перечисленных действий, показано на рисунке 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.addItemListener (new SomeItemEventHandler())
Очень часто действия, записанные в командах меню, вызываются не только щелчком кнопки мыши, но и «горячими» клавишами-акселераторами (shortcut), действующими чаще всего при нажатой клавише <Ctrl>. На экране в пунктах меню, которым назначены «горячие» клавиши, появляются подсказки вида Ctrl+N, Ctrl+O, как на рисунке 1. «Горячая» клавиша определяется объектом класса MenuShortcut и указывается в его конструкторе константой класса KeyEvent, например:
MenuShortcut keyCreate = new MenuShortcut (KeyEvent.VK_N);
После этого «горячей» будет комбинация клавиш <Ctrl>+<N>. Затем полученный объект указывается в конструкторе класса MenuItem:
MenuItem create = new MenuItem («Создать», keyCreate);
Нажатие <Ctrl>+<N> будет вызывать окно создания. Эти действия, разумеется, можно совместить, например,
MenuItem open = new Menultern («Открыть…»,
new – MenuShortcut (KeyEvent.VK_O));
Можно добавить еще нажатие клавиши <Shift>. Действие пункта меню будет вызываться нажатием комбинации клавиш <Shift>+<Ctrl>+<X>, если воспользоваться вторым конструктором:
MenuShortcut (int key, boolean useShift)
С аргументом useShift == true.
Пример создания меню
import java.awt.*;
import java.awt.event.*;
public class MenuScribble extends Frame {
public MenuScribble (String s) {
super(s);
MenuBar mb = new MenuBar();
setMenuBar(mb);