2012-12-11 21 views
0

我想在菜单栏上使用Ctrl而不是Alt键作为菜单的助记键。我认为它涉及使用setAccelerator。更改菜单栏菜单的默认从Alt到Ctrl的助记符?

formatMenu.setMnemonic(KeyEvent.VK_F); 
sizeMenu.setMnemonic(KeyEvent.VK_X); 
styleMenu.setMnemonic(KeyEvent.VK_Z); 

这是initalised的代码,它允许我打开菜单,但只有当我使用Alt。

回答

2

尝试使用

formatMenu.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F, ActionEvent.CTRL_MASK)); 

编辑:这是不行的,除非formatMenu是的JMenuItem;对于JMenu来说,设置一个加速器似乎不是本地支持的(至少我还没有找到任何结果)。解决方法是为菜单实现get/setAccelerator,就像这个SO answer(这是为子菜单完成的,但可以根据需要进行修改)。

所以才做这样的事情接受的答案有作用:

  JMenu formatMenu = new JMenu("Format Menu") { 
      private KeyStroke accelerator; 

      @Override 
      public KeyStroke getAccelerator() { 
       return accelerator; 
      } 

      @Override 
      public void setAccelerator(KeyStroke keyStroke) { 
       KeyStroke oldAccelerator = accelerator; 
       this.accelerator = keyStroke; 
       repaint(); 
       revalidate(); 
       firePropertyChange("accelerator", oldAccelerator, accelerator); 
      } 
      }; 
      formatMenu.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F, KeyEvent.CTRL_MASK)); 
+0

对不起,你想记忆。马上行动 – acostache

+0

java.lang.Error:setAccelerator()没有为JMenu定义。改用setMnemonic()。 – user1870404

+0

纠正了我的答案 - 我的不好,并没有注意到你正在使用JMenu,而不是JMenuItem – acostache