Java JPopupMenu updateOrInsertMenuItem(JPopupMenu menu, JMenuItem menuItem)

Here you can find the source of updateOrInsertMenuItem(JPopupMenu menu, JMenuItem menuItem)

Description

Depending on menuItem actionCommand, if a sub menu of menu has the same actionCommand then the already inserted menu item receive all the action listeners of the provided menuItem

License

Open Source License

Parameter

Parameter Description
menu Root of menu items
menuItem New menu item to insert

Declaration

public static void updateOrInsertMenuItem(JPopupMenu menu, JMenuItem menuItem) 

Method Source Code

//package com.java2s;
/**/*from  www.j a  v a 2 s . c o m*/
 * OrbisGIS is a GIS application dedicated to scientific spatial simulation.
 * This cross-platform GIS is developed at French IRSTV institute and is able to
 * manipulate and create vector and raster spatial information.
 *
 * OrbisGIS is distributed under GPL 3 license. It is produced by the "Atelier SIG"
 * team of the IRSTV Institute <http://www.irstv.fr/> CNRS FR 2488.
 *
 * Copyright (C) 2007-2012 IRSTV (FR CNRS 2488)
 *
 * This file is part of OrbisGIS.
 *
 * OrbisGIS 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.
 *
 * OrbisGIS 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
 * OrbisGIS. If not, see <http://www.gnu.org/licenses/>.
 *
 * For more information, please consult: <http://www.orbisgis.org/>
 * or contact directly:
 * info_at_ orbisgis.org
 */

import java.awt.event.ActionListener;

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

public class Main {
    /**
     * Depending on menuItem actionCommand, if a sub menu of menu has the
     * same actionCommand then the already inserted menu item receive all
     * the action listeners of the provided menuItem
     *
     * @param menu Root of menu items
     * @param menuItem New menu item to insert
     */
    public static void updateOrInsertMenuItem(JPopupMenu menu, JMenuItem menuItem) {
        updateOrInsertMenuItem(menu, menuItem, false);
    }

    /**
     * Depending on menuItem actionCommand, if a sub menu of menu has the
     * same actionCommand then the already inserted menu item receive all
     * the action listeners of the provided menuItem
     *
     * @param menu Root of menu items
     * @param menuItem New menu item to insert
     * @param hideOnUpdate If this action already exists, hide it from the
     * menu
     */
    public static void updateOrInsertMenuItem(JPopupMenu menu, JMenuItem menuItem, boolean hideOnUpdate) {
        if (!recursiveUpdateOrInsertMenuItem(menu, menuItem, hideOnUpdate)) {
            menu.add(menuItem);
        }
    }

    /**
     * @param menu
     * @param menuItem
     * @return True if another item was found with the same actionCommand 
     */
    private static boolean recursiveUpdateOrInsertMenuItem(MenuElement menu, JMenuItem menuItem,
            boolean hideOnUpdate) {
        boolean updated = false;
        for (MenuElement menuEl : menu.getSubElements()) {
            if (menuEl instanceof JMenuItem) {
                JMenuItem subMenuItem = (JMenuItem) menuEl;
                String actionCommand = subMenuItem.getActionCommand();
                if (actionCommand.equals(menuItem.getActionCommand())) {
                    if (hideOnUpdate) {
                        subMenuItem.setVisible(false);
                    } else {
                        for (ActionListener listener : menuItem.getActionListeners()) {
                            subMenuItem.addActionListener(listener);
                        }
                    }
                    updated = true;
                }
            } else {
                updated = updated || recursiveUpdateOrInsertMenuItem(menuEl, menuItem, hideOnUpdate);
            }
        }
        return updated;
    }
}

Related

  1. showPopupMenu(JPopupMenu popup, Component comp, int x, int y)
  2. showPopupMenu(JPopupMenu popup, Component comp, int x, int y)
  3. showPopupMenu(JPopupMenu popup, Component comp, int x, int y, boolean point)
  4. showPopupMenu(JPopupMenu popup, Component invoker, int x, int y)
  5. showPopupPanel(Component activationComponent, JPopupMenu popup)
  6. willPopupBeContained(JPopupMenu popup, Point origin)