2012-04-15 116 views
1

我想将加速器设置为JMenuItem。Java - 将加速器添加到JMenuItem

现在我将它设置这样

openFile.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, ActionEvent.CTRL_MASK)); 

,它的工作,但我不希望CTRL + O为加速器。我想'空间'作为加速器,但我没有找到任何方法,我可以生成对应'空间'的KeyStroke。

KeyStroke.getStroke() 

要么采用char或(int,int)。我也没有发现任何与空间相对应的字符。

回答

3

..找不到与空间对应的任何字符。

KeyEvent.VK_SPACE

如果摇摆忽略它,我也不会感到惊讶,因为' '是一个不寻常的&很难看到加速器。

+0

我说我没有找到'char'对应的空间。 'KeyEvent.VK_SPACE'是一个int类型,没有像KeyStroke.getStroke(int)这样的只接受int的方法。我不得不提供一些我不想要的修饰符。 – 2012-04-15 09:10:23

+0

所以让我弄清楚这一点。如果用户选中某个按钮并按下“步速”来激活它,那么您想要调用菜单操作?让我升级'不寻常和难看的加速器'到'不可行的GUI'。我的建议是'选择一个可行的加速器字母'。菜单项中显示的文字是什么? – 2012-04-15 09:38:45

+1

+1用于思考用户。 :-)更多[这里](http://stackoverflow.com/a/10161155/230513)。 – trashgod 2012-04-15 10:20:31

3

大多数用户界面代表使用类似METRICAL TETRASEME的东西渲染KeyEvent.VK_SPACE加速器:⏘(U+23D8)。例如,一个Action可能包括这些行:

static final int MASK = Toolkit.getDefaultToolkit().getMenuShortcutKeyMask(); 
putValue(Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke(KeyEvent.VK_SPACE, MASK)); 
+2

请注意,Mac OS X使用此加速器启动[聚光灯搜索](http://en.wikipedia.org/wiki/Spotlight_%28software%29)。 – trashgod 2012-04-15 10:26:59