我正在尝试在 Java 应用程序中为撤消、重做等创建菜单项加速器,以便我可以使用键盘命令访问它们。我还想让正确的键盘命令出现在正确的平台上。对于某些菜单项,例如“撤消”,它非常简单,因为它是Cmd/ Ctrl+ Z:
this.undoMenuItem.setAccelerator(KeyStroke.getKeyStroke(
KeyEvent.VK_Z, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
该方法getMenuShortcutKeyMask()
返回CmdMac 上的Ctrl密钥和 Windows 机器上的密钥。到目前为止,一切都很好。
但有些菜单项在不同平台上的组合键完全不同。要在 Mac OS 上重做,你需要Cmd+ Shift+ Z,但在 Windows 上你需要Ctrl+ Y。因此,除非您执行 if/then 语句来检查您所在的平台并将两组参数中的一组参数传递给函数,否则上述代码将不起作用。
我注意到KeyEvent类中有常量,例如KeyEvent.REDO
. 我假设这是“重做”组合键的常量,尽管我不确定,因为没有任何文档说明它的作用。所以我尝试了以下方法:
this.redoMenuItem.setAccelerator(KeyStroke.getKeyStroke(
KeyEvent.VK_REDO, 0));
我曾希望这会导致应用适当的组合键作为加速键,但似乎没有分配加速键(即菜单项名称旁边没有任何组合键指示符)。这是正确使用,KeyEvent.VK_UNDO
如果是,我做错了什么?