The currently selected menu or menu item in a JMenu
or JPopupMenu
is tracked by MenuSelectionManager
and can be retrieved by calling MenuSelectionManager.getSelectedPath()
. This method returns an array of MenuElement
objects, representing all the menu objects that are part of the selected menu or menu item. For example, when a menu is opened in a menu bar, the sequence of elements in the path is: JMenuBar
, JMenu
, and JPopupMenu
. If a menu item in the open menu is then selected, there will be fourth element, a JMenuItem
.
The menu path also includes nested menus. For example, if the currently selected menu item is part of a nested menu in a menu bar, the sequence of elements is: JMenuBar
, JMenu
, JPopupMenu
, JMenu
, JPopupMenu
, and JMenuItem
. Note that a JMenu
is always followed by a JPopupMenu
.
If a menu item in a popup menu is selected, the sequence of menu objects is simply JPopupMenu
and JMenuItem
. If the menu item is part of a nest menu, the sequence is, JPopupMenu
, JMenu
, JPopupMenu
, and JMenuItem
.
// Get the selected menu path MenuElement[] path = MenuSelectionManager.defaultManager().getSelectedPath(); if (path.length == 0) { // No menus are opened or menu items selected } // Retrieve the labels of all the menu elements in the path for (int i=0; i<path.length; i++) { Component c = path[i].getComponent(); if (c instanceof JMenuItem) { JMenuItem mi = (JMenuItem)c; String label = mi.getText(); // Note: JMenu is a subclass of JMenuItem; also JMenuBar does not have a label } }
Related Examples |