如何使 JMenu 在 JMenuBar 中具有按钮行为
我试图让 JMenu 表现得像 JButton,但我遇到了一些问题,希望这里有人可以提供帮助!
我已经向 JMenu 项目添加了一个 MenuListener,但我无法让弹出菜单/焦点离开,以使我能够正确地重复单击 JMenu 来触发此功能,我希望有人能告诉我我在做什么错误的。谢谢。
public void menuSelected(MenuEvent e)
{
... // do stuff here code
JMenu source = (JMenu)e.getSource();
source.setSelected(false);
source.setPopupMenuVisible(false);
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
不完全确定您在问什么...
但是
JMenuBar
继承自Container
- 如果您宁愿向其添加JButton
而不是JMenu
你可以简单地调用 -Not completely sure what you're asking...
But
JMenuBar
inherits fromContainer
- if you'd rather add aJButton
to it than aJMenu
you can simply call -此代码示例在 eclipse 中运行,再次关心您是如何使用它的?
This code sample runs in eclipse, Again concerned about how you are using it?
我知道这是一个旧线程,但我想我可能有一个解决方案。我在我的一个应用程序中偶然发现了这个问题,并找到了解决方法。尝试使用 JMenuItem 而不是 JMenu。当您将其附加到 JMenuBar 时,它将具有与 JMenu 相同的 L&F。您要做的唯一一件事就是设置新“按钮”的大小,因为您的布局管理器(即使您还没有设置)将根据其自己的规则调整该组件的大小:
http://www.javaworld.com/javaworld/jw-09-2000/jw-0922 -javatraps.html
可以在该链接下找到执行此操作的方法(如果单击该链接感觉不舒服,请在谷歌中搜索“setsize does not work” - 它将出现在前十个结果中)。如果您没有正确设置大小,您的新“按钮”将填满 JMenuBar 的剩余空间。
尝试以下代码:
setActionCommand() 方法将设置一个操作命令,这样当您单击新的“按钮”时,这将是由操作事件参数传递给操作执行方法的操作命令,以便您可以轻松识别它:
希望这有帮助!
I know this is an old thread, but I think I might have a solution. I stumbled accross this problem in one of my apps, and found a workaround. Try using a JMenuItem instead of a JMenu. It will have the same L&F as a JMenu when you attach it to a JMenuBar. The only thing you have to do is set the size of your new "button", as your Layout Manager (even if you have not set one) will resize this component based on its own rules:
http://www.javaworld.com/javaworld/jw-09-2000/jw-0922-javatraps.html
The way to do it is found under that link (if you feel uncomfortable clicking on the link, google for "setsize doesnt work" - it will be the in the top ten results). If you do not set the size properly, your new "button" will fill up the remaining space of your JMenuBar.
try this code:
setActionCommand() method will set an action command, so that when you click your new "button" this will be the action command passed by the action event argument to the action performed method, so that you can easily identify it:
Hope this helps!
很难确定您要在这里做什么。但我认为你没有正确使用 JMenu。
JMenu 是代表菜单的对象。它与菜单栏 (JMenuBar) 和菜单项 (JMenuItem) 分开。 JMenuBar 通常包含多个 JMenu(文件、编辑等),而 JMenu 又包含多个 JMenuItem(新建、打开、关闭)。 JMenuItems 是单击的内容,并且在菜单中“充当按钮”。
要使菜单项像按钮一样工作,只需将其添加到菜单中即可。例如:
如果您尝试创建弹出菜单,则需要使用 JPopupMenu 而不是 JMenu,并且不需要 JMenuBar。以下是有关菜单的 Java 教程:http://java. sun.com/docs/books/tutorial/uiswing/components/menu.html
以下是 JMenuBar, JMenu, JPopupMenu 和 JMenuItem 。
如果您编辑您的问题并对您正在做的事情提供更详细的解释,我也许能够提供更具体的帮助。
It's very difficult to determine what you're trying to do here. But I don't think you are properly using JMenu.
A JMenu is the object that represents a Menu. It is separate from the menu bar (JMenuBar) and from the menu item (JMenuItem). A JMenuBar usually contains multiple JMenus (File, Edit, etc) which in turn contain multiple JMenuItems (New, Open, Close). The JMenuItems are what is clicked and "acts like a button" in the menu.
To get a menu item to act like a button, simply add it to the menu. For example:
If you're trying to create a pop-up menu, you need to use JPopupMenu instead of JMenu, and you don't need a JMenuBar. Here are the Java tutorials on menus: http://java.sun.com/docs/books/tutorial/uiswing/components/menu.html
And here are the Java docs for JMenuBar, JMenu, JPopupMenu, and JMenuItem.
If you edit your question and give a more detailed explanation of what you're doing I might be able to give more specific help.
好的,我决定对此进行更多研究,以下是结果,看起来就像 JButton,但看起来像 jmenubar 上的 jmenu。代码如下。 (请注意,仅向 JMenu 添加一个 actionListener 并不能正常工作,这就是使用 mouselistener 的原因。您可以像普通按钮一样向菜单按钮添加一个 actionListener,只要您不向菜单按钮添加任何菜单项(从技术上讲,您可以这样做)它将在 JMenuBar 上显示为 JMenu,但其行为类似于按钮。
Ok I decided to investigate this a bit more and The following is the reslut and appears to act just like a JButton but appears like a jmenu on a jmenubar. Code below. (note just adding an actionListener to a JMenu didnt work right which is the reason for the mouselistener. You add an actionListener to the menubutton just like a normal button and as long as you dont add any menuitems to the menubutton (which technically you could) it will appear as a JMenu on the JMenuBar but behave like a button.