将菜单上菜单的助记符从默认Alt更改为Ctrl?

时间:2012-12-11 11:57:51

标签: java mnemonics

我想在菜单栏上使用Ctrl而不是Alt来表示菜单的助记符。我认为它涉及使用setAccelerator。

formatMenu.setMnemonic(KeyEvent.VK_F);
sizeMenu.setMnemonic(KeyEvent.VK_X);
styleMenu.setMnemonic(KeyEvent.VK_Z);

这是一个初始化的代码,它允许我打开菜单,但只有当我使用Alt。

1 个答案:

答案 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));