如何将JMenuItem转换为MenuItem或添加Action

时间:2013-03-11 14:48:58

标签: java swing menuitem jmenuitem

在我的OSX应用程序中,我有一个带有JMenus和Actions

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

但是我想在Dock中添加菜单,我可以使用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        
    }
}

但我真的不清楚这种转换是怎么做的,因为menuitem会使用动作

1 个答案:

答案 0 :(得分:2)

Action还实现了ActionListener,因此您不必执行任何特殊操作。只需将Action添加到MenuItem

即可

当您失去Action的这种行为时,您将手动需要设置MenuItem的文本和快捷方式。但您可以直接从Action获取此信息。

public MenuItem createMenuItemFromAction(Action action)
{
    MenuItem mi = new MenuItem(action.getValue(Action.NAME));
    mi.addActionListener( action );
}