Java Swing JMenu 助记符

Posted

技术标签:

【中文标题】Java Swing JMenu 助记符【英文标题】:Java Swing JMenu Mnemonic 【发布时间】:2011-05-25 00:12:47 【问题描述】:

我有一个使用 JMenu 创建的菜单。我想为此菜单分配一个快捷键 Alt-F。我使用 setMnemonic('F') 来做,但菜单无法识别助记符。

解决或调试此问题的最佳方法是什么?我发现设置断点并没有太大帮助。

谢谢。

代码片段:

//higher up in variable declaration
/** Menus on the menu bar */
private JMenu uiFindMnu           = new JMenu("Find");
...
//inside the constructor
// set mnemonic for the Find menu
uiFindMnu.setMnemonic('F');

【问题讨论】:

我想我们需要看看一些代码。 为什么有人会赞成这个问题?这是基本的东西。发帖者所要做的就是阅读 JMenu API 以找到指向“如何使用菜单”的 Swing 教程的链接以获取工作示例。为什么要奖励懒惰的人?不仅没有SSCCE,我们还在浪费时间猜测发帖人可能做错了什么,所以这个问题甚至不是一个完整的问题。 我发现 JMenu 助记符与按钮助记符的行为不同。当我想使用助记符点击按钮时,我可以简单地按 Alt,然后按快捷键。使用 JMenu,我必须:按下 Alt 按钮,等待 Swing 突出显示第一个菜单,使用箭头键选择其他菜单或按相应的快捷键选择菜单。 【参考方案1】:

类构造函数内部(扩展 JFrame):

JMenu helpmenu = new JMenu("File");
helpmenu.setMnemonic('F');
JMenuBar menubar = new JMenuBar();
menubar.add(helpmenu);
setJMenuBar(menubar);

这对我来说很好。您必须提供有关您的代码的更多详细信息,以便我给出更好的答案。至于对 SWING 或任何应用程序 GUI 进行故障排除,我能给出的最佳建议之一是创建最简单的可能场景。我保留了一个基本的 JFrame 模板,我可以在其中放入类似这样的简单代码进行测试。一旦您知道它在最简单的场景中工作,您就可以回到您的项目并发现您的 GUI 的其他部分导致与此功能的冲突。

出于好奇,您的构造函数中不会碰巧有一个名为“uiFindMnu”的局部变量来隐藏您的类变量,对吗?我会仔细检查以确保您调用 setMnemonic() 的变量是添加到您的 MenuBar(并实际显示)的变量。

【讨论】:

很好的答案,但它是not a good idea 来“扩展(ing)JFrame”【参考方案2】:

遇到类似问题,发现是由于初始化组件后的外观设置造成的。翻转语句,它起作用了。

发表博文here

【讨论】:

【参考方案3】:

使用setMnemonic(KeyEvent.VK_F);

我建议您阅读有关 JMenus 的文章:Howto use Menus

这里是这篇文章的摘录:

菜单支持两种键盘选择:助记符和 加速器。助记符提供了一种使用键盘导航的方法 菜单层次结构,增加程序的可访问性。 另一方面,加速器提供绕过的键盘快捷键 导航菜单层次结构。助记符适用于所有用户; 加速器适用于高级用户。

助记符是使已经可见的菜单项被选中的键。 例如,在 MenuDemo 中,第一个菜单有助记符 A,它的 第二个菜单项有助记符 B。这意味着,当你运行 具有 Java 外观的 MenuDemo,按 Alt 和 A 键 使第一个菜单出现。当第一个菜单可见时,按 B 键(带或不带 Alt)选择第二个菜单项。 菜单项通常通过在第一个项下划线来显示其助记符 在菜单项的文本中出现助记符,如 以下快照显示。 B 是这个菜单的助记符 项目

您可以在构建菜单项时指定助记符,或者 使用 setMnemonic 方法。以下是设置助记符的示例 和加速器:

//Setting the mnemonic when constructing a menu item:
menuItem = new JMenuItem("A text-only menu item",
                         KeyEvent.VK_T);

//Setting the mnemonic after creation time:
menuItem.setMnemonic(KeyEvent.VK_T);

如您所见,您通过指定 KeyEvent 常量来设置助记符 对应于用户应该按下的键。

【讨论】:

试试这个,我会让大家知道结果 @zfranciscus 用链接编辑了我的帖子,解释了您需要了解的有关 JMenus 的所有信息 :)

以上是关于Java Swing JMenu 助记符的主要内容,如果未能解决你的问题,请参考以下文章

教你用java编写计算器

java主界面表格(设置行数和只读)2018.8.23

swing之记事本的简单实现

如何使用 Swing 实现自动完成?

如何在 Java Swing 中创建右键单击上下文菜单?

设计个人简历