Java JMenuItem cloneMenuItem(final JMenuItem item)

Here you can find the source of cloneMenuItem(final JMenuItem item)

Description

Creates a copy of this menu item, whose contents update automatically whenever the original menu item changes.

License

Open Source License

Declaration

public static JMenuItem cloneMenuItem(final JMenuItem item) 

Method Source Code

//package com.java2s;
/*//from  ww w .  java  2 s  . co m
 * #%L
 * VisBio application for visualization of multidimensional biological
 * image data.
 * %%
 * Copyright (C) 2002 - 2014 Board of Regents of the University of
 * Wisconsin-Madison.
 * %%
 * 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 2 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/gpl-2.0.html>.
 * #L%
 */

import java.awt.event.ActionListener;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;

import javax.swing.JMenu;

import javax.swing.JMenuItem;

import javax.swing.KeyStroke;

public class Main {
    /**
     * Creates a copy of this menu item, whose contents update automatically
     * whenever the original menu item changes.
     */
    public static JMenuItem cloneMenuItem(final JMenuItem item) {
        if (item == null)
            return null;
        JMenuItem jmi;
        if (item instanceof JMenu) {
            final JMenu menu = (JMenu) item;
            final JMenu jm = new JMenu();
            final int count = menu.getItemCount();
            for (int i = 0; i < count; i++) {
                final JMenuItem ijmi = cloneMenuItem(menu.getItem(i));
                if (ijmi == null)
                    jm.addSeparator();
                else
                    jm.add(ijmi);
            }
            jmi = jm;
        } else
            jmi = new JMenuItem();
        final ActionListener[] l = item.getActionListeners();
        for (int i = 0; i < l.length; i++)
            jmi.addActionListener(l[i]);
        jmi.setActionCommand(item.getActionCommand());
        syncMenuItem(item, jmi);
        linkMenuItem(item, jmi);
        return jmi;
    }

    /** Brings the destination menu item into sync with the source item. */
    protected static void syncMenuItem(final JMenuItem source, final JMenuItem dest) {
        final boolean enabled = source.isEnabled();
        if (dest.isEnabled() != enabled)
            dest.setEnabled(enabled);
        final int mnemonic = source.getMnemonic();
        if (dest.getMnemonic() != mnemonic)
            dest.setMnemonic(mnemonic);
        final String text = source.getText();
        if (dest.getText() != text)
            dest.setText(text);
        final KeyStroke accel = source.getAccelerator();
        if (dest.getAccelerator() != accel)
            dest.setAccelerator(accel);
    }

    /**
     * Forces slave menu item to reflect master menu item using a property change
     * listener.
     */
    protected static void linkMenuItem(final JMenuItem master, final JMenuItem slave) {
        final JMenuItem source = master, dest = slave;
        source.addPropertyChangeListener(new PropertyChangeListener() {

            @Override
            public void propertyChange(final PropertyChangeEvent e) {
                syncMenuItem(source, dest);
            }
        });
    }
}

Related

  1. addMenu(JMenu poMenuPadre, JMenuItem poElemento, int piPosicion)
  2. addMenuItem(final JMenuItem mi, final C topLevelMenu, final List path)
  3. aplicarMenu(JMenuItem loMenuO, JMenuItem loMenuD)
  4. applyDefaultProperties(final JMenuItem comp)
  5. attachAcceleratorKeyNoCtrl(JMenuItem item, int keyEvent)
  6. configureMenuItem(JMenuItem item, Action action)
  7. createJMenuItem(Action action)
  8. createJMenuItem(JMenu menu, String text, int mnemonic, int acceleratorKey, String toolTip, ActionListener actionListener)
  9. createMenu(JMenuItem[] items, String name, String description, int mnemonic)