Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否将菜单栏上菜单的助记符从默认的Alt更改为Ctrl?_Java_Mnemonics - Fatal编程技术网

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

Java 是否将菜单栏上菜单的助记符从默认的Alt更改为Ctrl?,java,mnemonics,Java,Mnemonics,我想在菜单栏上使用Ctrl而不是Alt来记忆菜单。我认为这涉及到使用SET加速器 formatMenu.setMnemonic(KeyEvent.VK_F); sizeMenu.setMnemonic(KeyEvent.VK_X); styleMenu.setMnemonic(KeyEvent.VK_Z); 这是初始化代码,允许我打开菜单,但仅当我使用Alt时。请尝试使用 formatMenu.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_

我想在菜单栏上使用Ctrl而不是Alt来记忆菜单。我认为这涉及到使用SET加速器

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,如下所示(在这里,它是为一个子菜单完成的,但您可以根据需要进行修改)

因此,只需做一些与公认答案类似的事情:

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

错误:未为JMenu定义setAccelerator()。改为使用setMnemonic()。更正了我的答案-我的不好,没有注意到您使用的是JMenu,而不是jmenuItem。您是否也使用加速器添加了助记符以及上面的代码?我使用了以下命令:JMenu formatMenu=new JMenu(“格式菜单”){private KeyStroke accelerator;public KeyStroke getAccelerator(){return accelerator;}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));formatMenu.setMnemonic(KeyEvent.VK_F);我仍然无法让菜单使用CTRL而不是alt作为助记符