Обработка команд меню

Как было сказано, каждый элемент меню по сути представляет собой кнопку, поэтому реагирует на те же события и позволяет присоединять к себе тех же слушателей, что и кнопка. * Поэтому мы можем назначить реакцию на команды меню точно также, как делали это выше. Например, чтобы при выборе в меню элемента «Выйти» программа прекращала свою работу, следует заменить в примере команду

fileMenu.add(new JMenuItem("Выйти"));

напоследовательностькоманд:

JMenuItem exit = new JMenuItem("Выйти");exit.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) {System.exit(0);}});fileMenu.add(exit);

Командой System.exit(0) прекращается работа текущего приложения.

Создание контекстного меню

Контекстное (или всплывающее) меню реализовано в классе JPopupMenu, очень похожему на класс JMenu. Отличительным методом этого класса является метод show(Componentcomp, int x, int y), отображающий меню в точке с заданными координатами относительно границ заданного компонента.

Как уже отмечалось, контекстное меню, как правило, отображается при щелчке правой кнопкой мыши над компонентом. Таким образом, чтобы отобразить меню, требуется добавить к этому компоненту слушателя мыши.

Рассмотрим пример, в котором к уже созданному нами окну добавляется метка с надписью и контекстное меню из двух элементов, связанное с этой меткой. Необходимо добавить вконструктор перед последней командой (setSize) следующий код:

label = new JLabel("КНИЖКА", new ImageIcon("1.gif"), JLabel.RIGHT);JPanelpanel = new JPanel();panel.add(label);popup = new JPopupMenu();popup.add(new JMenuItem("Прочитать"));popup.add(new JMenuItem("Сжечь"));label.addMouseListener(new MouseAdapter(){ public void mouseClicked(MouseEventevent) { if (SwingUtilities.isRightMouseButton(event))popup.show(label, event.getX(), event.getY());}});setContentPane(panel);

При этом в определении класса окна следует ввести два поля:

JPopupMenupopup;JLabellabel;

Это необходимо для того, чтобы анонимный класс-слушатель мог обратиться к метке и к контекстному меню.

Приведенный пример также иллюстрирует применение полезного методаisRightMouseButton(MouseEventevent), определенного в классе вспомогательных утилит SwingUtilities. Метод получает информацию о событии мыши и отвечает на вопрос, была ли нажата именно правая кнопка мыши. Методы getX() и getY() возвращают координаты курсора мыши относительно наблюдаемого компонента.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: