Создать меню в Java достаточно просто. Недавно мы с вами говорили о том как создать всплывающее меню в Java. Сначала создается строка меню.
1 |
JMenuBar menuBar = new JMenuBar(); |
Строка меню — это обычный компонент, который можно разместить где угодно. Как правило, его помещают в верхнюю часть фрейма с помощью метода setJMenuBar():
1 |
frame.setJMenuBar(menuBar); |
Для каждого меню создается свой объект:
1 |
JMenu editMenu = new JMenu("Edit"); |
Меню верхнего уровня помещается в строке меню:
1 |
menuBar.add(editMenu); |
Затем в объект меню добавляются пункты, разделители и подменю:
1 2 3 4 5 |
JMenuItem pasteItem = new JMenuItem("Paste"); editMenu.add(pasteItem); editMenu.addSeparator(); JMenu optionsMenu = ...; // Подменю. editMenu.add(optionsMenu); |
Разделители показаны на рис.1. Они отображаются под пунктами Paste(Вставка) и Rad-only(Только для чтения).
Когда пользователь выбирает меню, генерируются события. Следовательно, для каждого пункта меню надо определить обработчик:
1 2 |
ActionListener listener = ...; pasteItem.addActionListener(listener); |
Существует удобный метод JMenu.add(String), позволяющий добавлять новый пункт в конец меню, например, следующим образом:
1 |
edit.Menu.add("Paste"); |
Этот метод возвращает созданный пункт, для которого можно легко задать обработчик:
1 |
JMenuItem pasteItem = editMenu.add("Paste");pasteItem.addActionListener(listener); |
Довольно часто пункты меню связываются с командами, которые могут активировать другие элементы пользовательского интерфейса, например, кнопки. В ранних статьях говорилось о том, как задаются команды с помощью объектов Action. Следует определить класс, реализующий интерфейс Action. Обычно для этого класс расширяет AbstractAction. Затем в конструкторе AbstractAction указывается метка пункта меню и переопределяется метод actionPerformed(), что позволяет реализовать обработку события, связанного с данным пунктом. Например:
1 2 3 4 5 6 7 |
Action exitAction = new AbstractAction("Exit"); // Пункт меню "Exit". { public void actionPerformed(ActionEvent event) {// Фрагмент программы, обрабатывающий событие. System.exit(0); } }; |
Затем добавляется в меню:
1 |
JMenuItem exitItem = fileMenu.add(exitAction); |
В результате выполнения данного выражения в меню добавляется новый пункт. Объект Action становится обработчиком. Такой способ заменят следующие строки кода:
1 2 |
JMenuItem exitItem = new JMenuItem(exitAction); fileMenu.add(exitItem); |
В программах для Windows и Macintosh меню обычно определяются во внешних файлах ресурсов и связываются с приложениями с помощью идентификаторов ресурсов. Меню можно создавать непосредственно в программе, однако, как правило, так не поступают.
В Java меню создаются обычным образом, поскольку возможности взаимодействия с внешними ресурсами еще более ограничены, по сравнению с теми, которые предоставляют среды Windows и Mac OS.