Java:JMenuItem不使用ActionMap/AbstractAction

Java:JMenuItem不使用ActionMap/AbstractAction,java,swing,action,jmenu,Java,Swing,Action,Jmenu,通用代码 出于某种原因,我的JMenuItem没有执行操作 我做了一个框架,一个JMenuBar和一个JMenuItem,一切都在它应该在的地方。我可以点击JMenuItem很好,它会高亮显示并正确关闭菜单,但不会执行任何操作 我向ActionMap添加了一个带有JMenuItems名称的键。我还向输入映射添加了一个名称完全相同的键,它可以正常启动 'menuitem'.setActionMap(getActionMap()); System.out.println('menui

通用代码

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

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

我向
ActionMap
添加了一个带有
JMenuItem
s名称的键。我还向输入映射添加了一个名称完全相同的键,它可以正常启动

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

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

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

ActionMap/InputMap用于键绑定,而不是用于鼠标单击。不,setActionCommand将设置getActionCommand返回的内容(显然)。如果查看提供的代码,getActionCommand将返回正确的操作键。我能理解setActionCommand什么都不做吗?我假设setActionCommand将使其成为这样,按下菜单项将调用其动作映射的相应动作…@kleopatra:
setActionCommand()
在您拥有自己的自定义
ActionListener
时非常有用,它负责处理
ActionEvent
s。在这种情况下,可以使用
setActionCommand()
并将
actionPerformed()
的适当实现委托给组件的
ActionMap
中的操作对象集(例如)。同样,如果要调试代码,它也很有用:通过这种方式,可以通过操作事件的命令来识别操作事件。如果出于任何原因需要actionCommand,请在操作上设置其值,而不是在按钮上。不要使用ActionListener,永远,永远,永远要使用可用的最高抽象