我有一个使用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');
答案 0 :(得分:5)
在类构造函数内部(扩展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(并实际显示)的变量。
答案 1 :(得分:2)
使用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常量来设置助记符 对应于用户应按的键。
答案 2 :(得分:2)
遇到类似问题并意识到由于在初始化组件后设置外观导致了问题。翻转语句并且有效。
发表了博客文章here