嘗試使用
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));
對不起,你想記憶。馬上行動 – acostache
java.lang.Error:setAccelerator()沒有爲JMenu定義。改用setMnemonic()。 – user1870404
糾正了我的答案 - 我的不好,並沒有注意到你正在使用JMenu,而不是JMenuItem – acostache