Java Swing Menu installMenuKeyListener(Component cmp, MenuKeyListener keyListener)

Here you can find the source of installMenuKeyListener(Component cmp, MenuKeyListener keyListener)

Description

Installs the key listener in the tree of components where the argument component is included, starting in the first parent JFrame or JDialog parent.

License

Open Source License

Parameter

Parameter Description
cmp The starting components in the tree.
keyListener The key listener to install.

Declaration

public static void installMenuKeyListener(Component cmp, MenuKeyListener keyListener) 

Method Source Code


//package com.java2s;
/*/*  w ww.  j  a v  a2s.com*/
 * Copyright (C) 2015 Miquel Sas
 * 
 * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public
 * License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later
 * version.
 * 
 * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
 * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License along with this program. If not, see
 * <http://www.gnu.org/licenses/>.
 */

import java.awt.Component;
import java.awt.Container;

import java.util.ArrayList;

import java.util.List;

import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;

import javax.swing.event.MenuKeyListener;

public class Main {
    /**
     * Installs the key listener in the tree of components where the argument component is included, starting in the
     * first parent <i>JFrame</i> or <i>JDialog</i> parent.
     * 
     * @param cmp The starting components in the tree.
     * @param keyListener The key listener to install.
     */
    public static void installMenuKeyListener(Component cmp, MenuKeyListener keyListener) {
        List<Component> components = getAllComponents(cmp);
        for (Component component : components) {
            if ((component instanceof JPopupMenu)) {
                JPopupMenu popupMenu = (JPopupMenu) component;
                popupMenu.addMenuKeyListener(keyListener);
            }
            if ((component instanceof JMenuItem)) {
                JMenuItem menuItem = (JMenuItem) component;
                menuItem.addMenuKeyListener(keyListener);
            }
        }
    }

    /**
     * Returns the list of all components contained in a component and its subcomponents.
     * 
     * @return The list of components.
     * @param parent The parent component.
     */
    public static List<Component> getAllComponents(Component parent) {
        List<Component> list = new ArrayList<>();
        fillComponentList(parent, list);
        return list;
    }

    /**
     * Returns the array of all components contained in a component and its subcomponents.
     * 
     * @param parent The parent component.
     * @param clazz The class to filter components.
     * @return The array of components.
     */
    public static List<Component> getAllComponents(Component parent, Class<?> clazz) {
        return getAllComponents(parent, new Class[] { clazz });
    }

    /**
     * Returns the list of all components contained in a component and its subcomponents.
     * 
     * @param parent The parent component.
     * @param classes an array of possible classes.
     * @return The list of components.
     */
    public static List<Component> getAllComponents(Component parent, Class<?>[] classes) {
        List<Component> list = new ArrayList<>();
        List<Component> components = getAllComponents(parent);
        for (Component component : components) {
            for (int j = 0; j < classes.length; j++) {
                if (classes[j].isInstance(component)) {
                    list.add(component);
                }
            }
        }
        return list;
    }

    /**
     * Fills the array list with the all the components contained in the parent component and its sub-components.
     * 
     * @param list An <code>ArrayList</code>.
     * @param cmp The parent component.
     */
    public static void fillComponentList(Component cmp, List<Component> list) {
        list.add(cmp);
        if (cmp instanceof Container) {
            Container cnt = (Container) cmp;
            for (int i = 0; i < cnt.getComponentCount(); i++) {
                fillComponentList(cnt.getComponent(i), list);
            }
        }
    }

    /**
     * Returns the component with the given name contained in the top component, or null if it does not contain a
     * component with that name.
     * 
     * @param topComponent The top component.
     * @param name The name of the component to search.
     * @return The component with the name or null.
     */
    public static Component getComponent(Component topComponent, String name) {
        List<Component> components = getAllComponents(topComponent);
        for (Component component : components) {
            if (component.getName() != null && component.getName().equals(name)) {
                return component;
            }
        }
        return null;
    }
}

Related

  1. getMenuSectionLabel(String string)
  2. getOperationMenu(MenuElement currentMenu, String path)
  3. getParsedElements(MenuElement[] elements)
  4. getTheMenuBar(String[][] arr)
  5. hasIcons(MenuElement menuElement)
  6. isMenuCrossMenuMnemonics()
  7. limitMenuSize(List items, String name, int size)
  8. makeMenuBar(List menus)
  9. makeMenubarNice()