我想使用 Ctrl 而不是 Alt 作为菜单栏上菜单的助记符。我认为它涉及使用 setAccelerator。
formatMenu.setMnemonic(KeyEvent.VK_F);
sizeMenu.setMnemonic(KeyEvent.VK_X);
styleMenu.setMnemonic(KeyEvent.VK_Z);
这是初始化代码,它允许我打开菜单,但仅当我使用 Alt 时。
尝试使用
formatMenu.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F, ActionEvent.CTRL_MASK));
编辑:除非 formatMenu 是 JMenuItem,否则这将不起作用;对于 JMenu,本地似乎不支持设置加速器(至少我没有找到任何结果)。一种解决方法是为菜单实现 get/setAccelerator ,就像在这个SO 答案中一样(对于子菜单已经完成,但您可以修改以满足您的需要)。
所以只要做一些像那里接受的答案一样的事情:
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));