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

标签 java swing menuitem jmenuitem

在我的 OSX 应用程序上,我有一个带有 JMenus 和操作的 JMenubar

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

但我想将菜单添加到扩展坞,我可以使用 Apple 扩展来实现:

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

请注意,这是来自 swing 的 awt,因此我需要添加 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 不使用操作

最佳答案

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

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

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

关于java - 如何将 JMenuItem 转换为 MenuItem 或添加 Action,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15341532/

相关文章:

java - @JsonProperty 在枚举中被忽略

java - 如何在表格中将 URL 显示为可点击的 URL 并允许它们在默认浏览器中打开?

c# - 如何将 ViewModel(包括分隔符)正确绑定(bind)到 WPF 的菜单?

java - 使用 JAXB 根​​据属性创建引用对象

java - 引用 JPanel Action 监听器内部的类

java - 使用 JSON 将 2 个参数传递给 struts2 操作

java - 图形绘制图像双陆棋游戏

java - 无法在 Swing 中获取 JTable 中的列名称

android - setDisplayHomeAsUpEnabled(false) 在 fragment 中不起作用

android - Gmail 平板电脑喜欢 Actionbar 项目