仅在单击鼠标 Swing 时打开 popupMenu

发布于 2025-01-01 04:54:34 字数 369 浏览 1 评论 0原文

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

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

所以,我有一个包含 JMenu 的 JMenuBar(我们称之为“文件”)。当我按“文件”时,将打开一个 JPopupMenu,其中包含一个 JMenuItem 和另一个 JMenu(我们称之为“属性”)。 有什么方法可以将与我在属性 JMenu 中相同的行为应用到 文件 JMenu:仅当用户单击 JPopup 而不是将鼠标悬停在其上时打开 JPopup?

我知道这是试图避免 JMenu 的正常行为,但你们中有人知道这是否可能吗?

I have a question related with JPopupMenu that maybe someone can help me.

As far as I can see, a JPopupMenu opens when you press a JMenu (is this is in a JMenuBar) or when you hover over a JMenu (if this is in a JPopupMenu).

So, I have a JMenuBar containing a JMenu (let's call it 'File'). When I press 'File', a JPopupMenu open, which contains a JMenuItem and another JMenu (let's call it 'Properties').
Is there any way I can apply the same behaviour to the Properties JMenu as I have in the
File JMenu: only opens the JPopup when the user click it and not hover over it?

I know this is trying to avoid the normal behavior for the JMenu, but any of you have an idea if this is possible?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

抚笙 2025-01-08 04:54:34

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

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

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

谢谢

This is something very specific and I dont know if there are many people doing this. :)
Anyway, I leave a solution for this in case someone needs it.

First is important to notice that these changes are done in the UI classes. Both BasicMenuItemUI and BasicMenuUI have a inner class Handler that take care about the mouse events. The inner class Handler in the BasicMenuUI extends the inner class Handler in the BasicMenuItemUI and because they private and anonymous (respectively) is hard to change the code.
But, in both cases, there are a protected Handler which points to the Handlers I talked in the previous paragraph.

So, as a solution I extended those protected handlers in my own MyOwnBasicMenuUI and MyOwnBasicMenuItemUI implementations and I applied my own behavior.
Now I have a JMenu which only opens when the user clicks it, and remains open till the user clicks somewhere else.
If someone wants more details, I can provide them.

Thanks

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文