2012-12-11 22 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