2017-09-26 746 views
0

我想捕捉事件,当用户点击TestSuite并动态添加一些MenuItems。添加单击事件处理程序到JMenu

JMenu menu5 = new JMenu("TestSuite"); 

如何在Java Swing上做到这一点?我可以通过添加addActionListener(this)来捕获所有JMenuItem点击事件。但是这次不是JMenuItem,它是JMenu。

+0

(1-)'当用户点击TestSuite并动态添加一些MenuItems .' - 这是一个糟糕的设计。你怎么知道用户何时想“添加一些MenuItems”或者他们是否想显示弹出式菜单?也许第一个菜单项应该是“添加更多...”菜单项。 – camickr

+0

这是一个完全合乎逻辑的问题。不要认为它是“添加”菜单项,Marcus很可能想要根据当时的状态来动态地创建菜单的内容。他使用“添加”可能是对问题的简化。 –

+0

@BillK,是的,我看你是否完全“重建”菜单,每次这是合理的。无论如何,我的评论是针对“添加”的规定。 – camickr

回答

-3

您可以使用ActionListener接口,就像在JButton上添加事件一样。

menu5.addActionListener(this); 

其中“this”是在上面的示例中实现ActionListener接口的类的引用,它是相同的类。

添加你可以使用menu5.add(新菜单项(“菜单物品1”))

+0

(1-)您可以将ActionListener添加到JMenuItem,但不添加到JMenu。 – camickr

+0

你是多么愚蠢。去检查java doc –

+1

'你是多么愚蠢。去检查java doc' - 我想我应该更清楚。您可以将ActionListener添加到JMenu,但是当您单击菜单时,不会调用侦听器。这就是OP在问这个问题的原因。他们特别声明ActionListener为JMenuItem工作,但不是JMenu。 – camickr

2

您可以将MenuListener添加到JMenu和监听menuSelected事件菜单。这将允许您在弹出窗口可见之前动态地添加/删除菜单项到菜单。

+0

如果他们使用加速键,添加鼠标侦听器将失败。 –

+0

@BillK你不能将加速器添加到菜单中,我认为你的意思是“nomomics”。在这种情况下,MenuListener将被调用。正如我所建议的,您需要根据实际需求选择解决方案。菜单的设计不是以这种方式使用。 – camickr

+0

许多程序根据状态添加和删除菜单项......仅仅因为您没有遇到一组要求,您可能不应该认为它们无效。 –

相关问题