2012-01-30 99 views
0

我有一个问题与JPopupMenu有关,也许有人可以帮助我。打开弹出菜单只在鼠标单击摆动

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

所以,我有一个JMenuBar包含一个JMenu(我们称之为'文件')。当我按'文件'时,一个JPopupMenu打开,其中包含一个JMenuItem和另一个JMenu(我们称之为'属性')。 有没有什么办法可以像我在 文件JMenu中那样将相同的行为应用到属性JMenu中:只有在用户单击它时不打开JPopup而不是悬停在它上面?

我知道这是为了避免JMenu的正常行为,但是你们有没有想法,如果这是可能的?

回答

1

这是非常具体的东西,我不知道是否有很多人这样做。 :) 无论如何,我留下一个解决方案,以防万一有人需要它。

首先重要的是要注意到,这些变化是在UI类来完成。 BasicMenuItemUI和BasicMenuUI都有一个处理鼠标事件的内部类Handler。 BasicMenuUI中的内部类Handler扩展了BasicMenuItemUI中的内部类Handler,并且因为它们分别是private和anonymous,所以很难更改代码。 但是,在这两种情况下,都有一个受保护的处理程序,它指向我在前一段中讨论的处理程序。

所以,作为一个解决方案,我在我自己的MyOwnBasicMenuUI和MyOwnBasicMenuItemUI实现扩展的保护处理程序和我申请我自己的行为。 现在我有一个JMenu对象只有当用户点击它打开,直到用户点击了其他位置保持开放。 如果有人想要更多的细节,我可以提供。

谢谢

+0

您能否提供[SSCCE](http://sscce.org/)?我想做同样的事情。谢谢。 – 2012-11-22 16:19:46

相关问题