Java Swing JMenu助记符

时间:2010-12-14 00:44:50

标签: java swing

我有一个使用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');

3 个答案:

答案 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