【问题标题】:Java: JMenuItem not working with ActionMap/AbstractActionJava:JMenuItem 不适用于 ActionMap/AbstractAction
【发布时间】:2011-12-04 22:45:22
【问题描述】:

通用代码...

由于某种原因,我的JMenuItem 没有执行操作。

我做了一个框架,一个JMenuBar和一个JMenuItem,一切都在它应该在的地方。我可以点击JMenuItem 就好了,它会正确突出显示并关闭菜单,但没有执行任何操作。

我使用JMenuItems 名称向ActionMap 添加了一个密钥。我还在 Input 映射中添加了一个具有完全相同名称的键,它可以正常触发。

    'menuitem'.setActionMap(getActionMap());
    System.out.println('menuitemname'.getActionMap().size());
    System.out.println('menuitemname'.getActionCommand());

分别返回 1 和正确的操作键。单击菜单项不会执行任何操作。我有什么遗漏吗?

【问题讨论】:

  • ActionMap/InputMap 用于键绑定,而不是鼠标点击。

标签: java swing action jmenu


【解决方案1】:

您可能正在寻找setAction() 方法(也可能是setActionCommand())。

【讨论】:

  • 不,setActionCommand 将设置 getActionCommand 返回的内容(显然)。如果您查看提供的代码,getActionCommand 会返回正确的操作键。我是否理解 setActionCommand 什么都不做?我假设 setActionCommand 会这样做,以便按下菜单项会为其操作图调用相应的操作...
  • @kleopatra:setActionCommand() 在您有自己的自定义ActionListener 时很有用,它负责处理ActionEvents。在这种情况下,可以使用setActionCommand() 并将actionPerformed() 的适当实现委托给组件的ActionMap 中的操作对象集(例如)。同样,如果您想调试代码,它也很有用:这样您就可以通过它们的命令来识别您的动作事件。
  • 如果您出于任何原因想要一个 actionCommand,请将其值设置在 Action 上,而不是按钮上。永远不要使用 ActionListener,永远追求可用的最高抽象
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-16
  • 1970-01-01
  • 1970-01-01
  • 2017-07-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多