Как преобразовать JMenuItem в MenuItem или добавить действие

В моем приложении OSX у меня есть JMenubar с JMenus и действиями

editMenu= new JMenu("EDIT);
editMenu.add(new CopyAction());
editMenu.add(new PasteAction());

но я хочу добавить меню в док-станцию, которую я могу использовать с расширениями Apple, и:

Application.getApplication().setDockMenu(java.awt.PopupMenu popupMenu)

Обратите внимание, что это не качели, поэтому мне нужно добавить MenuItems, а не JMenuItems

public class DockMenu extends PopupMenu
{
    public DockMenu()
    {
        add(createMenuItemFromAction(new CopyAction()));
        add(createMenuItemFromAction(new PasteAction()));
    }

    public MenuItem createMenuItemFromAction(Action action)
    {
        MenuItem mi = new MenuItem();
        //TODO How do I convert        
    }
}

Но я действительно не понимаю, как это преобразование, так как элемент меню не использует действия


person Paul Taylor    schedule 11.03.2013    source источник


Ответы (1)


Действие также реализует ActionListener, поэтому вам не нужно делать ничего особенного. Просто добавьте действие в MenuItem

Вам нужно будет вручную установить текст и ярлык MenuItem, поскольку вы потеряете это поведение действия. Но вы можете получить эту информацию непосредственно из Action.

public MenuItem createMenuItemFromAction(Action action)
{
    MenuItem mi = new MenuItem(action.getValue(Action.NAME));
    mi.addActionListener( action );
}
person camickr    schedule 11.03.2013
comment
+1 Для справки: в этом примере везде используются одни и те же экземпляры Action; это также иллюстрирует кроссплатформенное преимущество getMenuShortcutKeyMask(). - person trashgod; 12.03.2013