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,永远,永远,永远要使用可用的最高抽象