只在鼠标单击Swing时打开popupMenu

时间:2012-01-30 10:41:20

标签: java swing click jpopupmenu jmenu

我有一个与JPopupMenu有关的问题,也许有人可以帮助我。

据我所见,当您按下JMenu(这是在JMenuBar中)或将鼠标悬停在JMenu上时(如果它在JPopupMenu中),JPopupMenu会打开。

所以,我有一个包含JMenu的JMenuBar(我们称之为'File')。当我按下'文件'时,JPopupMenu打开,其中包含一个JMenuItem和另一个JMenu(我们称之为'属性')。 有没有什么办法可以将相同的行为应用于属性JMenu,就像我在 文件JMenu:只有当用户点击它并且不将鼠标悬停在它上面时才打开JPopup?

我知道这是为了避免JMenu的正常行为,但是你们中有谁知道这是否可行?

1 个答案:

答案 0 :(得分:1)

这是非常具体的,我不知道是否有很多人这样做。 :) 无论如何,如果有人需要,我会为此留下一个解决方案。

首先要注意这些更改是在UI类中完成的。 BasicMenuItemUI和BasicMenuUI都有一个内部类Handler来处理鼠标事件。 BasicMenuUI中的内部类Handler扩展了BasicMenuItemUI中的内部类Handler,因为它们私有和匿名(分别)很难更改代码。 但是,在这两种情况下,都有一个受保护的Handler指向我在前一段中谈到的处理程序。

所以,作为一个解决方案,我在我自己的MyOwnBasicMenuUI和MyOwnBasicMenuItemUI实现中扩展了这些受保护的处理程序,并且我应用了我自己的行为。 现在我有一个JMenu,它只在用户点击它时打开,并保持打开状态直到用户点击其他地方。 如果有人想要更多细节,我可以提供。

由于