我想在菜单栏上使用Ctrl而不是Alt来表示菜单的助记符。我认为它涉及使用setAccelerator。
formatMenu.setMnemonic(KeyEvent.VK_F);
sizeMenu.setMnemonic(KeyEvent.VK_X);
styleMenu.setMnemonic(KeyEvent.VK_Z);
这是一个初始化的代码,它允许我打开菜单,但只有当我使用Alt。
时答案 0 :(得分: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));