尝试使用
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